как придерживаться принципа Don't-Repeat-Yourself (DRY), когда будет слишком много if-then-else, делая код нечитаемым?

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

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

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

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

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

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

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

Удачи

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

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

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

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

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

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

2. Существуют методы, которые вы можете использовать для уменьшения количества вложенных операторов if, которые у вас есть …

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

 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 уровня вложенных if / elses, и вы хотите их сгладить, вы можете найти свой код более читаемым, чтобы использовать несколько аргументов, например, выше. Он делает то же самое, это просто вопрос предпочтения, каким образом вы это делаете.

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

Встроенный PHP (старайтесь избегать):

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

Логика отдельно от дисплея (лучше):

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

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

Удачи чувак!

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

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

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

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

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

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

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

Удачи

Если утверждения считаются логическими утверждениями, их следует избегать как можно больше, поскольку они нарушают принципы 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'; } } 

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