2009-06-01 3 views
1

Я хотел бы придерживаться принципа Don't-Repeat-Yourself, но иногда, когда я пишу PHP вместе с HTML и CSS, если я повторно использую один и тот же код для разных ситуаций, у моего кода скоро будет так много if-then-else, что код не легко поддерживается.Как придерживаться принципа Don't-Repeat-Yourself (DRY), когда будет слишком много if-then-else, делая код нечитаемым?

Это может быть большая проблема, если Smarty, используется механизм шаблонов, потому что большинство редакторов кода не совпадают {if} {else} {/ if} Поэтому программисту необходимо визуально искать соответствующий тег, и нелегко, когда есть 3 или 4 уровня вложенных {if} {else} {/ if}.

В такой ситуации есть ли способ придерживаться СУХОЙ, но при этом иметь хороший код для обслуживания?

+0

Является ли ваша проблема с кодом управления шаблонами или логики встраиваемый в шаблонах или некоторые спагеттификации двух> –

+0

@Aiden в основном логически встроены в шаблоны –

+0

@Jian Lin .. это имеет больше смысла. Приятно видеть, что вы не управляете строками шаблона/html в инструкциях PHP: P –

ответ

3

Коротких полной базы, что я, как правило, сделать для содержания (даже если она содержит логик) является отделить его в файлы и использовать другую логическую оценку, чтобы объединить их вместе (калечить их), а затем оценить шаблонный логики после этого. Это расшифровывает ваш контент и делает фрагменты совместными/многоразовыми в общем состоянии.

Таким образом, каждый окончательный буфер шаблона представляет собой сплющенное дерево дискретных повторно используемых конгруэнтов контента, которые можно хранить на диске или базе данных. Даже как-то просто, как маленький парсер, который заменяет:

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

С shared_page_header.txt помогает держать вещи отдельно. Это также заставляет вас смотреть на разделение на проблемы даже в логике, встроенной в ваши шаблоны. Управляемые, многоразовые куски чего-либо (динамические или нет) - это всегда путь. Ваши шаблоны просто строятся до тех пор, пока не будут оценены, поэтому рассмотрите их как разделяемых компонентов, объединенных в большую грязную строку (TM), а затем оценивайте.

Good Luck

+0

Мне нравится идея установки стиля дерева для кеширования. – Ballsacian1

+1

@ Ballsacian1 - У меня есть файл Python, который составляет около 200 строк, которые я использую для выравнивания строк и кеширования статических поддеревьев. Всегда удобно! –

0

Первое предложение вашего вопроса является проблема, ИМО. Вы действительно не должны смешивать код с вашим видом (т. Е. HTML и CSS). Существует несколько инфраструктур PHP MVC, которые помогут вам не делать этого. Структура Zend довольно приличная, но есть и другие.

Если вы не хотите использовать фреймворк, я бы предложил рефакторинг ваших страниц, чтобы не использовать такой код и вызвать объекты на задней панели. Смешивание вашего кода и просмотра быстро становится недопустимым в любом языке, а не только PHP.

+0

даже разделяя HTML и CSS на шаблоны, ситуация все еще возникает: слишком много вложенных файлов if-then-else. и Smarty if-then-else еще труднее читать и сопоставлять. –

0

Теперь я, возможно, не знаком с внедрением концепций ООП с использованием PHP, но рефакторинг этих вложенных операторов if-else и их размещение в хорошо названной функции очень помогает в соблюдении принципа DRY. И, кроме того, придерживаться принципа DRY делает ваш код удобным.

0

С помощью файла сценария, например, это будет намного проще для нас, чтобы указать, где вы собираетесь не так, однако некоторые вещи, которые могут или не могут помочь вам в зависимости от того, что вы пытаетесь достичь:

  • Взглянув на alternative syntax for control structures. Некоторые люди предпочитают использовать этот стиль при написании файлов, которые в основном содержат HTML, причем PHP используется только для определения разделов HTML.

  • Разделите многоразовые разделы кода на файлы, которые вы можете позже включить, т.е. header.php, footer.php и т. д.

  • Использование IDE с поддержкой сворачивания кода

удачи

5

Просто так мы подробнее ... Какую программу вы используете для написания кода?

Советы не повторять себя:

Используйте какие-то шаблоны. Выполнение этого не позволяет повторить код для отображения содержимого на каждой из ваших страниц. И.Е. Если у вас есть сайт с 20 страницами, и вы решили изменить свой макет, вы не захотите пройти, а затем изменить все 20 ваших страниц.

Использование функций. Если у вас есть код, который выполняет определенную задачу, НЕ записывайте этот код несколько раз на протяжении всей вашей программы/страницы. Создайте функцию, а затем вызовите ее в каждом месте, где вам нужно выполнить эту задачу. Таким образом, если вам нужно внести изменения, вы просто изменяете эту функцию и не должны искать через свой код, чтобы найти все места, в которых вы выполняли эту задачу. Если вы знаете о классах & методов (метод - это функция в классе), для многих задач это еще лучше, поскольку он обеспечивает инкапсуляцию данных и позволяет группировать связанные функции вместе, чтобы вы могли включить класс в будущем проектов по мере необходимости.

Если у вас возникли трудности с большим количеством, если/иначе и код не является очень читаемый, есть несколько вещей, которые вы можете сделать:

1. Рассмотрим пытается новый редактор. Сгибание кодов является обязательным. Некоторые редакторы также имеют вертикальные линии, которые выделяют и сопоставляют отступы, чтобы вы знали, что с ними связано. Если вы хотите достойный бесплатный редактор, я бы порекомендовал Notepad ++, поскольку у него есть обе эти функции (просто Google, я не могу добавлять ссылки здесь).

2. Есть методы, которые можно использовать, чтобы уменьшить количество вложенных если заявления, что у вас есть ...

Пример (этот код):

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

Может быть также выровнял в:

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; 
} 

Итак, если у вас есть 3 или 4 уровней вложенности, если/и вернулись на Родину вы хотите, чтобы сгладить их, вы можете найти свой код далее способный использовать несколько аргументов, например, выше. Он делает то же самое, это просто вопрос предпочтения, каким образом вы это делаете.

Попробуйте не смешивать свою логику (я предполагаю PHP) и ваш дисплей (я предполагаю HTML/CSS). Это не всегда легко сделать, но с использованием шаблонов и css это возможно. Позвольте мне дать вам практический пример того, как вы можете сделать это на домашней странице, которая отображает имя пользователя в качестве приветственного сообщения.

Инлайн PHP (стараются избегать):

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

Logic отдельно от дисплея (лучше):

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

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

^Поддержание вашей логики отдельно от вашей точки зрения (HTML) поможет вам не получить перегружены, когда ваш проект начинает становиться действительно сложным. Лучше всего не смешивать! :)

Удачи!

0

Если утверждения считаются логическими утверждениями, их следует избегать во взглядах как можно больше, поскольку они нарушают принципы MVC.

переключатель для просмотра хелперы вместо этого, например:

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'; 
    } 
} 

Этот код можно использовать повторно, проверяемым, будет держать ваш код сухой :)