Антипаттерн: Спагетти-код

По аналогии с паттернами проектирования (как надо проектировать системы), появилось еще одно интересное направление программистской мысли – антипаттерны (самые популярные ошибки совершаемые программистами).

Самым часто встречающимся из них является антипаттерн “Код-спагетти”, с него и начну.
Больше всего этому антипаттерну подвержены небольшие программы, написанные без использования объектно-ориентированной модели. Почему это так – поймете позже.

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

Не смотря на то, что спагетти-код очень часто определяется с первого взгляда на код, из-за невыдержанности стиля оформления кода программистом (что говорит о его неопытности), существуют еще несколько более глубоких признаков такого кода:

  • После анализа кода, выявляется, что только незначительная часть всего кода может быть использована независимо от него в другой системе.
  • Многие методы объектов не содержат параметров, а используют глобальные переменные вместо этого.
  • Все объекты практически не связаны между собой.
  • Большинство методов являются скорее процессо-ориентированы, нежели объектно-ориентированы.
  • Код не поддается повторному использованию, а если поддается, то только через copy-paste.
  • Наследование не используется для расширения системы.
  • Система быстро достигает точки, в которой стоимость ее содержания превышает стоимость ее построения с нуля.

Причин появления такого кода несколько:

  • Отсутствие опыта в ООП у программиста
  • Отсутствие куратора у молодого специалиста приступающего к сопровождению большой системы
  • Пропущена стадия проектирования ПО (сразу начинается программирование).

Несмотря на все недостатки такого кода, в некоторых случаях он имеет право на существование.

Спагетти-код допустим в следующих случаях:

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

Очевидным способом борьбы со спагетти-кодом является превентивная мера в виде первоначального проектирования ПО.

Если же код приложения все-таки уже представляет из-за себя Спагетти-код, то единственным решением будет его рефакторинг (хотя еще можно переписать все с нуля).





Читайте также:



3 Ответов на “Антипаттерн: Спагетти-код”

  1. […] php (из последнего опубликованного — Антипаттерн: Спагетти-код). Кроме этих рубрик рекомендую заглянуть еще в AJAX / […]

  2. Дмитрий

    Уж не имеете ли вы в виду под спагетти кодом простой процедурный подход? Поверьте, он так же весьма эффективен как и много лет назад 😉
    Вы когда-нибудь писали cmd-файлы? Вот там то очень просто понять что такое “спагетти”…
    Один из главных признаков спагетти кода - запутанность и непомерная сложность, т.е. функциональности кот наплакал, а если нарисовать граф зависимостей - то это просто шедевр)))
    За что же, думаете, был с позором исключён оператор goto из ЯВУ? Именно за то, что он с легкостью позволяет запутывать код и им сложно аккуратно воспользоваться. Если есть одна метка, то не важно какая с ней связана семантика - логика будет понятна. А если меток 10 и каждая имеет весьма туманное значение - вот тут и начинается ад.
    Спагетти код возможен, конечно, и без goto - ну конечно, но не из-за отсутствия структуры, а из-за большого количества связей и высокой сложности.

  3. Даниел

    Читаю с удовольствием статьи в рубрике “Профессиональный php”. Спасибо вам за все статьи, очень ясно написаны. Буду читать с удовольствием и последующие!


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map