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

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

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

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

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

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

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

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

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

+17
источник

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

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

P.S. http://en.wikipedia.org/wiki/Spaghetti_code

+7
источник

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

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

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

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

+5
источник

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

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

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

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос