Каковы характеристики кода спагетти?

Кто-то сказал, что когда ваш PHP-код и приложение используют глобальные переменные, тогда это должен быть код спагетти (я предполагаю это). Я много использую WordPress. Насколько я знаю, это лучшее, что можно найти рядом с отличным программным обеспечением PHP. И он использует множество глобальных переменных для взаимодействия между его компонентами.

Но забудь об этом, потому что, честно говоря, это единственное, что я знаю. Так что это полностью предвзято; D

Итак, мне просто интересно, Какова характеристика кода спагетти?

PS: Единственное, что я знаю, это WordPress. Так что, надеюсь, возможно, это поможет кому-то дать отличный ответ для тех, у кого мало опыта разработки полного веб-приложения на PHP (например, веб-сайта Stack Overflow).

  • Нет модульности (все в одном файле, классе, модуле, пространстве имен, пакете или любом другом, что ваш язык использует для обеспечения модульности),
  • Множество goto 's,
  • Плохая организация,
  • Четкое разделение функциональности и цели. (То есть всеохватывающие классы или функции)
  • Длинные функции.
  • Плохое именование.
  • Нет постоянного стиля кодирования.
  • Нет четкого интерфейса между реализацией и клиентами кода. (То есть, нет спецификации того, какие входы, выходы, пред- и пост-условия функций)
  • Чрезмерная зависимость от внутренних структур данных с небольшой абстракцией.
  • Функции беспорядочно переставляют / изменяют глобальное состояние без упоминания об этом в документации.
  • Отсутствие комментариев или документации нетривиального кода.
  • Код, который более сложный, чем он должен быть.
  • Отсутствие повторного использования. (много дублированного кода, иначе copypasta )
  • Нет проверки или модульного тестирования (он работает на веру).
  • Магические числа.

В сущности, недостаток дизайна и предусмотрительности, а также просто беспорядок из-под халатов. Это относится к любому языку, а не только к PHP.

для тех, у кого мало опыта разработки полного веб-приложения на PHP (например, веб-сайта «Переполнение стека»)

Просто FYI, но Stack Overflow не был разработан с PHP.

Хорошо, говоря о комментариях, которые вы опубликовали, объяснение очень простое. Использование global оператора делает источник переменной неизвестным, как и другой конец лапши спагетти. Его можно определить везде. Поэтому, когда вы вызываете свою функцию, вы не представляете, какое значение имеет эта переменная. Вместо этого прямая передача переменной делает ее понятной и понятной:

 function hello_testing($conditional_random) { if ($conditional_random)) { echo "foo is inside"; } } 

PS http://en.wikipedia.org/wiki/Spaghetti_code

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

Вот почему в этом контексте часто приводятся GOTO (ужасное слово!): Оператор GOTO передает управление другому произвольно определенному местоположению в базе кода. Большинство языков программирования имеют команды, которые можно злоупотреблять, чтобы имитировать поведение стиля goto ; например, использование исключений для реализации обычной бизнес-логики, а не для обработки ошибок.

Глобальные переменные вносят вклад в код спагетти, поскольку значения присваиваются за пределами области действия текущего программного блока. Это может затруднить определение, где в базе кода переменная установлена ​​на заданное значение (или действительно ли оно установлено на любое значение вообще).

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

WordPress – это самый большой фрагмент кода спагетти PHP, который я видел. Существует шокирующее сочетание PHP, HTML, JavaScript и всех вещей между всеми сосредоточенными в одних и тех же файлах. Если вам нужен еще один пример кода спагетти, посмотрите на osCommerce или Zen Cart .

На самом деле, осмелюсь сказать, что подавляющее большинство PHP-приложений с открытым исходным кодом – довольно шокирующие примеры того, как программировать на PHP. Если вы хотите посмотреть на хороший структурированный пример (то есть не спагетти), посмотрите на структуру Yii или Zend Framework . Структуры, такие как CodeIgniter и Kohana , хотя и не спагетти, не очень хорошие примеры того, как структурировать вещи на PHP 5, поскольку они используют многие функции, используемые в PHP 4, просто потому, что не было лучшего способа сделать их до PHP 5 (например , используя наследование на основе пути вместо наследования истинного объекта).

Если вы хотите, чтобы разумный хороший пример процедурного программирования сделал правильный взгляд на Drupal . Это может быть не самое эффективное исполняемое приложение PHP из-за сложности, но оно, несомненно, превосходит WordPress, и вы можете делать с ним много общего.