О видах плохого кода
21 августа 2017
Плохой код бывает разным. Можно выделить множество его видов, но сегодня поговорим о двух, названных в честь вкусных итальянских блюд: спагетти и лазаньи.
Спагетти
Плохо структурированный код, в котором всё располагается в одном и том же месте и жутко намешано.
Такой код выдают новички, которые ещё не научились структурировать кол и не задумываются об архитектуре. Типичные причины появления:
- Мало опыта.
- Не думают о структурировании кода.
- Слишком сжатые сроки.
Абстракция и слои
Как сделать код лучше? Отрефакторить введя абстракцию. Единственная цель абстракции — сделать всё проще для понимания, чем оно было.
У нашего мозга два типа памяти, один из которых — кратковременная память. Она чем-то напоминает стек, размер которого, в среднем, равен пяти элементам. Из за этого ограничения не получается работать с сильно сложными системами. Абстракция — способ сгруппировать детали так, чтобы они влезли в кратковременную память. Если слои спроектированы верно, то в каждом из них находится не более пяти компонент. Таким образом, можно оперировать всей системой на каждом из уровней несмотря на сложность.
Лазанья
Слоёный код с чистыми интерфейсами. Если слоение сделано верно, то код хорош. К сожалению, правильно выделить слои сложно и частенько получается не то, что хотелось бы: плохая лазанья, в которой слишком много слоёв.
Цель кода-лазаньи — сделать всё проще путём введения слоёв. Часто разработчики фанатично идут к этой цели, создавая один слой за другим. Каждый слой в итоге получается простым, но взаимодействие между слоями выходит сложным. Итог — поддерживать сложнее, чем это было до начала слоения. Типичные причины появления:
- Мало опыта.
- Обдумывание повторного использования кода до обдумывания применения.
- Нечёткие требования.
- Постоянно меняющиеся цели проекта.
Что же лучше?
Я думаю, что лучше уж спагетти, чем плохая лазанья. И то и то, конечно, зло, которое необходимо рефакторить. Спагетти рефакторить проще. Чтобы рефакторить плохую лазанью сначала приходится убрать все слои (то есть превратить её в спагетти), а потом уже думать над тем, как заново правильно ввести слои.
Комментарии RSS по email OK
Есть ещё пицца код, это слои как в лазанье покоящиеся на основе из евент диспетчера. Попытка выудить кусочек салями превращается в вырванный ком из сыра, помидоров и теста.
О, да. Архитектуры, основанные исключительно на событиях — это моё любимое.
Пицца код - довольно специфичное и редкое блюдо :)
вот поэтому bitrix - лучшая система для веб проектов
Лазанья лучше спагетти в общем случае, по-моему. Основной минус спагетти - неявные зависимости. Поменял что-то в одном месте с одной целью, а оказалось сломалось в десятке мест, потому что использовалось там, но проследить оказалось невозможным.
Основной минус лазаньи - минорное вроде изменение типа "добавить поле" оказывается размазанным по десятку файлов.
Но выбирая между "долго делать что-то новое и легко недоделать" и "легко сломать имеющееся", я выберу первое
Не хватает примеров кода:)
Было бы полезно еще разместить информацию для обучения, так как данный пост констатация факта, и что с этим фактом делать дальше не ясно :)
На моей практике сейчас проблема в постоянно меняющихся целях.
смотришь на код лазенья из спагетти :(