Question

J'ai l'impression d'être actuellement impliqué dans un débat avec un autre programmeur sur ce projet qui pense que les opinions n'ont aucun mérite.Il propose un système qui PHP ressemble à ceci :

$draw = new Draw;
$nav = $draw->wideHeaderBox().
$draw->left().
    $draw->image().
        Image::get($image,60,array('id'=>'header_image')).
    $draw->imageEnd().
$draw->leftEnd().
$draw->left(10).
    '<div id="header_text">'.
        self::defaultSectionText().
    '</div>'.
$draw->leftEnd().

et ainsi de suite (c'est dans le contrôleur d'ailleurs).Maintenant, ses arguments en ce sens ont du sens, il affirme que s'il y a une refonte, tout ce que nous devons faire est de changer le code HTML en un seul endroit et il change automatiquement partout.Cependant, pour une raison quelconque, cette méthode me dérange toujours, y a-t-il un mérite à avoir des opinions sur cette méthode ?Je veux dire en plus de ne pas avoir à retaper le HTML à la main.

Était-ce utile?

La solution

Les gain de temps HTML sont utiles, mais ils ne le sont que lorsqu'ils sont intuitifs et faciles à comprendre.Devoir instancier un new Draw cela ne semble tout simplement pas très naturel.En outre, wideHeaderBox et left n'aura de signification que pour quelqu'un qui connaît intimement le système.Et si là est une refonte, comme le dit votre collègue ?Et si le wideHeaderBox devient très étroit ?Allez-vous modifier le balisage (et les styles, vraisemblablement) générés par la méthode PHP mais laisser un nom de méthode très inexact pour appeler le code ?

Si vous les gars avoir pour utiliser la génération HTML, vous devez l'utiliser entrecoupé dans des fichiers de vue, et vous devez l'utiliser là où c'est vraiment nécessaire/utile, comme quelque chose comme ceci :

HTML::link("Wikipedia", "http://en.wikipedia.org");
HTML::bulleted_list(array(
    HTML::list_item("Dogs"),
    HTML::list_item("Cats"),
    HTML::list_item("Armadillos")
));

Dans l'exemple ci-dessus, les noms de méthodes ont un sens pour les personnes qui ne connaissent pas votre système.Ils auront également plus de sens pour vous lorsque vous retournerez dans un fichier rarement visité et que vous vous demanderez ce que vous faisiez.

Autres conseils

L'argument qu'il utilise est l'argument dont vous avez besoin pour avoir vues.Les deux aboutissent à le modifier uniquement à un seul endroit.Cependant, dans sa version, vous mélangez le balisage de vue avec le code métier.

Je suggérerais d'utiliser davantage une conception basée sur un modèle.Faites toute votre logique métier dans PHP, configurez toutes les variables nécessaires à votre page.Ensuite, demandez simplement au balisage de votre page de référencer ces variables (et de ne traiter aucune logique métier).

Avez-vous regardé Smarty ? http://smarty.php.net

J'ai fait quelque chose comme ça dans le passé, et c'était une perte de temps.Par exemple, vous devez essentiellement écrire des wrappers pour tout ce que vous pouvez déjà avec HTML et vous oublierez certaines choses.Lorsque vous devez modifier quelque chose dans la mise en page, vous penserez "Tirez, j'ai oublié ça... maintenant je dois coder une autre méthode ou ajouter un autre paramètre".

En fin de compte, vous disposerez d’une énorme collection de fonctions/classes qui génèrent du HTML dont personne ne saura ou ne se souviendra comment utiliser dans des mois.Les nouveaux développeurs vous maudiront pour avoir utilisé ce système, puisqu'ils devront l'apprendre avant de changer quoi que ce soit.En revanche, plus de gens connaissent probablement le HTML que vos cours de dessin HTML abstrait... et parfois, il suffit de se salir les mains avec du HTML pur !

Pour être honnête, cela semble assez verbeux et difficile à suivre et une partie du code semble contenir en grande partie des informations de mise en page.

Nous essayons toujours de séparer autant que possible la logique de la sortie.Cependant, il arrive souvent que la vue et les données soient très étroitement liées, les deux parties dictant comment l'autre devrait être (par exemple, dans un simple site de commerce électronique, vous pouvez décider de commencer à afficher les niveaux de stock à côté de chaque produit). , ce qui impliquerait évidemment de changer la vue pour ajouter le code HTML approprié pour cela, et la logique métier pour déterminer une valeur pour le stock).

Si l'idée de conserver 2 fichiers pour ce faire est trop difficile à gérer, essayez de diviser les choses en une partie « Collecter des données » et une partie « Afficher », pour obtenir la plupart des avantages sans augmenter le nombre de fichiers que vous devez gérer. .

Je trouve toujours beaucoup plus facile de travailler directement avec du HTML.Il y a une couche d'abstraction de moins (html -> page Web réelle / fonction php -> html -> page Web réelle) à gérer, vous travaillez simplement en HTML.

Je pense vraiment que le principe «il suffit de le changer au même endroit» ne fonctionnera pas dans ce cas.En effet, cela se produira très souvent lorsque vous souhaiterez modifier la sortie d'une fonction, mais seulement à un seul endroit.Bien sûr, vous pouvez utiliser des arguments, mais vous vous retrouverez bientôt avec certaines fonctions ayant une douzaine d'arguments.Beurk.

Gardez à l’esprit que les langages/systèmes de modèles vous permettent souvent d’inclure des sous-modèles, vous permettant ainsi d’avoir des blocs de HTML réutilisables.

En fin de compte, si je venais de commencer dans votre entreprise et que je voyais du code comme celui-là partout, ma première pensée serait : « Bon sang !J'ai encore besoin d'un nouvel emploi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top