Подход 1. Внедряем всё и сразу.
Начитавшись книжек по чистому коду и чистой архитектуре, первое что хочется сделать это внедрить всё сразу в свой проект.
Это нормальное желание и вполне обоснованное. В конце концов, для того чтобы чему-нибудь научиться нужно сначала попробовать.
Поэтому этот подход очень хорош именно для обучения. Попробовать на практике все принципы и разобраться в них. Понять где и как их применять.
Подход 2. Внедряем по месту и по ситуации.
Если мы уже разбираемся в том где и как применять принципы чистого кода и чистой архитектуры, то можем применять их только там и тогда, когда это действительно необходимо.
То есть, вместо того чтобы изначально закладывать в проект кучу абстракций, мы действуем следующим образом.
- Команда договаривается о том что она следует принципам чистого кода и чистой архитектуры.
- Затем, как только выявляется расхождение с этими принципами то вносятся изменения в код или архитектуру проекта, которые устраняют это расхождение.
Например мы можем где-то обнаружить что абстракция верхнего уровня зависит от деталей реализации и тем самым создаётся неудобство в работе. Кроме потенциального неудобства в работе — это уже привело к каким-то негативным последствиям. Например, нам потребовалось переписать большой участок кода и затратить много времени ради какого-то мелкого изменения. Или например мы что-то в деталях поменяли а у нас всё сразу сломалось.
В любом случае первым поводом к изменению будет именно возникшая проблема. Проблема возникла, мы определили, что это произошло вследствие нарушения какого-то из принципов чистого кода и чистой архитектуры. Далее мы либо правим код устраняя причину, либо исправляем архитектуру, либо вводим какое-то соглашение для команды которая предотвращает такие ситуации в дальнейшем.
При таком подходе внедрения принципов по месту у нас будут минимальные затраты на поддержку и минимальная сложность проекта. Единственное ограничение здесь что нужно будет держать себя в руках и не бросаться переписывать весь проект.
Такой подход позволит избежать лишних абстракций и лишней сложности.