comment adhérer à la répétition-Ne vous-même (DRY) principe quand il y aura trop de si-then-else rendre le code illisible?

StackOverflow https://stackoverflow.com/questions/937225

Question

Je voudrais adhérer à la répétition-Ne vous-même principe, mais parfois quand j'écris PHP avec HTML et CSS, si je re-utiliser le même code pour différentes situations, mon code sera bientôt si beaucoup si-alors d'autre que le code est facilement maintenable.

Cela peut être un problème plus important si Smarty, le moteur de templating est utilisé, parce que la plupart éditeur de code ne sera pas correspondre {if} {else} {/ if} Ainsi, le programmeur a besoin de chercher l'étiquette correspondant visuellement, et est pas facile quand il y a 3 ou 4 niveaux de imbriqué {if} {else} {/ if}.

Dans une telle situation, est-il un moyen de rester à sec, mais encore du bon code maintenable?

Était-ce utile?

La solution

court d'un cadre complet, ce que je tends à faire pour le contenu (même si elle contient la logique) est séparent sur dans les fichiers et utiliser une autre évaluation logique de les fusionner (les mutiler) et puis évaluer la logique de templating après. Ce chunkifies votre contenu et fait des morceaux partageable / réutilisables sur l'état commun.

De cette façon, chaque tampon de modèle final est un arbre aplati de pépites de contenu réutilisables discrets que vous pouvez stocker sur le disque ou une base de données. Même quelque chose d'aussi simple comme un petit analyseur qui remplace:

<h1>{{insert:shared_page_header}}</h1>

Avec shared_page_header.txt aide à garder les choses séparées. Il vous oblige aussi à regarder la séparation des préoccupations, même dans la logique qui est intégré dans vos modèles. gérables, morceaux réutilisables de quoi que ce soit (dynamique ou non) sont toujours le chemin à parcourir. Vos modèles ne sont que des chaînes jusqu'à évalué, afin de les traiter comme des composants partagées fusionné dans un grand-string sale (TM), puis évalué.

Bonne chance

Autres conseils

Juste pour que nous avons plus d'info ... Quel programme utilisez-vous pour écrire votre code?

Conseils pour ne pas vous répéter:

Utilisez une sorte de modèles. Cela vous évite d'avoir à répéter le code pour afficher le contenu dans chacune de vos pages. C'EST À DIRE. Si vous avez un site avec 20 pages et que vous décidez de changer votre mise en page, vous ne voulez pas avoir à passer par puis changer toutes les 20 de vos pages.

Utiliser les fonctions. Si vous avez du code qui exécute une tâche spécifique, ne pas écrire que le code à plusieurs reprises tout au long de votre programme / page. Créer une fonction puis l'appeler dans chaque endroit où vous avez besoin de cette tâche effectuée. De cette façon, si vous avez besoin de faire un changement vous suffit de modifier qu'une fonction et ne pas avoir à chercher dans votre code pour trouver tous les lieux que vous avez effectué cette tâche. Si vous connaissez des classes et méthodes (une méthode est une fonction dans une classe), pour de nombreuses tâches, ce qui est encore mieux, car il vous fournit l'encapsulation de données et vous permet de les fonctions apparentées ensemble afin que vous pouvez inclure la classe à l'avenir des projets selon les besoins.

Si vous rencontrez des difficultés avec beaucoup de if / else et le code ne pas être très facile à lire, il y a quelques choses que vous pouvez faire:

1. Envisager d'essayer un nouvel éditeur. Code de pliage est un must. Certains éditeurs ont aussi des lignes verticales qui mettent en valeur et correspondent code indenté afin que vous sachiez ce qui se passe avec quoi. Si vous voulez un éditeur gratuit décent, je recommande Notepad ++ car il a à la fois ces caractéristiques (il suffit de Google, je ne peux pas ajouter des liens ici).

2. Il existe des techniques que vous pouvez utiliser pour réduire le nombre de déclarations imbriquées si vous avez ...

Exemple (code):

if (item1 == true) {
   if (item2 == true) {
      item3 = 5;
   }
   else {
      item3 = 10;
   }
}
else {
   if (item2 == true) {
      item3 = 15;
   }
   else {
      item3 = 20;
   }
}

Peut être aplati dans:

if (item1 == true && item2 == true) {
   item3 = 5;
}
else if (item1 == true && item2 == false) {
   item3 = 10;
}
else if (item1 == false && item2 == true) {
   item3 = 15;
}
else {
   item3 = 20;
}

Donc, si vous avez 3 ou 4 niveaux de emboîtée si / elses et que vous voulez les aplatir, vous pouvez trouver votre code plus lisible d'utiliser plusieurs arguments tels que ci-dessus. Il fait la même chose, il est juste une question de préférence pour la façon dont vous le faites.

Essayez et ne pas mélanger votre logique (je suppose que PHP) et votre écran (je suppose que HTML / CSS). Ce n'est pas toujours facile à faire, mais en utilisant des modèles et des css, c'est possible. Permettez-moi de vous donner un exemple concret de la façon dont vous pouvez le faire sur une page d'accueil qui affiche un nom d'utilisateur comme un message de bienvenue.

Inline PHP (essayez d'éviter):

<html>
   <body>
      <?php
      if ($logged_in == true) {
         echo "Welcome ",$user->name(),"!";
      }
      else {
         echo "Welcome Guest!";
      }
      ?>
   </body>
</html>

Logic distinct de l'affichage (meilleure):

<?php
if ($logged_in == true) {
   $greetingMessage = "Welcome ",$user->name(),"!";
}
else {
   $greetingMessage = "Welcome Guest!";
}
?>

<html>
   <body>
      <?php echo $greetingMessage; ?>
   </body>
</html>

^ Garder votre logique séparée de votre point de vue (HTML) vous aidera pas se laisser submerger quand votre projet commence à devenir vraiment complexe. Il est préférable de ne pas mélanger tout simplement! :)

Bon homme chance!

La première phrase de votre question est le problème, l'OMI. Vous le code devriez vraiment pas mélanger avec votre point de vue (à savoir HTML et CSS). Il y a plusieurs frameworks MVC PHP qui vous aideront à ne pas le faire. Le Zend Framework est assez décent, mais il y a d'autres.

Si vous ne souhaitez pas utiliser un cadre, je vous suggère de refactorisation vos pages de ne pas utiliser le code comme celui-ci et appeler des objets à l'arrière. Le mélange de votre code et vue devient rapidement ingérable dans any langue, pas seulement PHP.

Maintenant, je ne peux pas être familier avec la mise en œuvre des concepts de POO en PHP, mais refactorisation ces instructions imbriquées if-else et en les plaçant dans une fonction bien nommée aide beaucoup à se tenir au principe DRY. Et d'ailleurs, coller avec le principe SEC ne fait votre code maintenable.

Avec un exemple de fichier de script, il serait beaucoup plus facile pour nous montrer où vous allez mal, cependant certaines choses qui peuvent ou ne peuvent pas vous aider en fonction de ce que vous essayez d'atteindre:

  • Un regard sur syntaxe alternative pour le contrôle structures . Certaines personnes préfèrent utiliser ce style lors de l'écriture des fichiers qui contiennent principalement HTML, PHP utilisé uniquement pour décider quelles sections HTML à la sortie.

  • Scinder les sections de code réutilisables dans les fichiers que vous pouvez inclure plus tard, soit. header.php, footer.php etc.

  • En utilisant un IDE qui supporte le pliage code

Bonne chance

Si les déclarations sont considérées comme des énoncés logiques, ils devraient être évités dans les vues autant que possible car ils violent les principes MVC.

Commutateur pour afficher les aides à la place, par exemple:

class LoggedUsernameHelper
{
    protected $user;

    public function __construct(SomeUserObject $user)
    {
        $this->user=$user;
    }

    public function __toString()
    {
        return $user->isLogged() ? sprintf('Welcome %s', $user->getUsername()) :
            'Welcome guest';
    }
}

Ce code est réutilisable, testables, gardera votre code sec:)

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