Про “вынести код в другое место”.

Переложив код с одного места в другое, мы не решим проблему.

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

Сложность остаётся в проекте, только теперь уже скрытая и становится ещё опаснее.

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

Иногда даже больше цепочка, в три и более уровней наследования.

Потом за такие “хитрые” решения огребают все кто работает с этим кодом. Так как скрытая в родительских классах сложность обязательно где-нибудь выстрелит.

Так в молодёжных комедиях показывают как убирается школьник или студент. Заметает мусор под ковёр, под кровать, в чулан. Мусор никуда не делся, но в комнате якобы чисто. До тех пор, пока кто-нибудь не откроет чулан.

Примеры

Распространённые способы “спрятать” сложность, которая позже выстрелит:

  1. Eloquent: Scopes и Relations, усложняются SQL запросы “под капотом” но мы этого не видим и думаем что всё в порядке.
  2. Наследование: выносим в родительские классы и делаем связи неочевидными.
  3. Yii2 Model: Behaviors, Scenarios, события AfterFind, BeforeSave, AfterSave.
  4. Перемещение бизнес-логики в конфиги. Особенный вид издевательства над кодом!
  5. Класс формы, который выполняет бизнес-логику, а не только проверку полей в форме, например сохраняет что-то или отправляет события.
  6. Хранимые процедуры и View Tables: спихиваем сложность на уровень БД.

Что же делать если не переносить в другое место?

Избавляться от сложности совсем. Упрощать сложные места. Перепроектировать, чтобы сложное стало простым.

Для этого читаем книги, статьи, чужой код, проектируем, рефакторим, нарабатываем навык на практике методом проб и ошибок.

Со временем появляется чутьё на сложный код и понимание как его можно упростить.

Базовое правило

Держите сложные места на виду, пусть они будут очевидными и раздражать вас.

Так вы и не пропустите их и будет мотивация от них избавиться.