Обычный инстинкт - удалить любое дублирование кода, которое вы видите в коде. Однако я оказался в ситуации, когда дублирование иллюзорно .
Чтобы описать ситуацию более подробно: я разрабатываю веб-приложение, и большинство представлений в основном одинаковы - они отображают список элементов, которые пользователь может прокручивать и выбирать, второй список, содержащий выбранные элементы, и «Сохранить». Кнопка, чтобы сохранить новый список.
Мне показалось, что проблема проста. Тем не менее, у каждого представления есть свои особенности - иногда вам нужно что-то пересчитать, иногда вы должны хранить некоторые дополнительные данные и т. Д. Я решил это, вставив хуки обратного вызова в основной логический код.
Между представлениями так много мелких различий, что они становятся все менее и менее обслуживаемыми, потому что мне нужно предоставить обратные вызовы для практически всех функций, и основная логика начинает выглядеть как огромная последовательность вызовов обратного вызова. В конце я не экономлю ни времени, ни кода, потому что у каждого представления есть свой собственный код, который выполняется - все в обратных вызовах.
Проблемы:
- различия настолько малы, что код выглядит почти одинаково во всех представлениях,
- Есть так много различий, что, когда вы смотрите на детали, код не похож
Как мне справиться с этой ситуацией?
Является ли ядро логики, состоящее полностью из вызовов обратного вызова, хорошим решением?
Или мне лучше дублировать код и отбросить сложность кода, основанного на обратном вызове?