2.7Kпросмотров
12 ноября 2022 г.
Score: 2.9K
#чистаяархитектура Введение Сегодня я хотел бы поговорить о трёх, часто забываемых принципах чистой архитектуры. Речь пойдёт о триаде принципов для компонентов(минимальных единиц развёртывание, с точки зрения питона, это один/несколько файлов с колом): CCP, CRP, REP. CCP Расшифровка: Common Closure Principle – принцип согласованного изменения. CCP - это перефразированый SRP только для компонентов. Данный принцип требует, чтобы компонент имел единую ответственность и не имел несколько причин для изменения. Если два класса тесно связаны, физически или концептуально, настолько, что всегда будут изменяться вместе, они должны принадлежать одному компоненту. Давайте кратко сформулируем этот принцип: Собирайте вместе все, что изменяется по одной причине и в одно время. Разделяйте все, что изменяется в разное время и по разным причинам. CRP Расшифровка: Common Reuse Principle - принцип совместного повторного использования. CRP - указывает, что в компонент должны включаться классы и модули, используемые совместно.
Данный принцип предполагает, что в компоненте должны быть классы, имеющие множество зависимостей друг от друга. Как пример абстрактные фабрики и их фасад. Давайте кратко сформулируем этот принцип: Не вынуждайте пользователей компонента зависеть от того, чего им не требуется. REP REP - Release Equivalence Principle - Принцип эквивалентности повторного использования и выпуска. Данный принцип означает, что эффективно переиспользовать можно только компоненты, релизнутые через системы версионирования. Без номера версии невозможно гарантировать совместимость всех компонентов, а разработчики не смогут чётко увидеть когда версия появилась и какие изменения в ней произошли. С точки зрения архитектуры принцип означает, что классы и модули, составляющие компонент, должны принадлежать связной группе. Очень похоже на предыдущие принципы, не так ли? Но тут появляется ещё одно условие. Классы и модули, объединяемые в компонент, должны выпускаться вместе. Давайте кратко сформулируем этот принцип: 1. Единица повторного использования = единице выпуска
2. Эффективно можно использовать только компоненты, имеющие номер версии. Противоречия Внимательный читатель заметил что все 3 принципа одновременно соблюсти невозможно. Принципы CCP и REP стремятся сделать компонент как можно мельче, а принцип CRP как можно крупнее. Наша задача понять когда, какой принцип важнее. Для этого я выделил набор правил. 1. В фреймворках/библиотеках должен соблюдаться именно CCP, соблюдение CRP приведёт к каше, так как в фреймворках/библиотеках важнее всего чёткость компонентов и структура. 2. В больших проектах соблюдение CCP приведёт к слишком большому количеству компонентов, что только усложнит разработку.
3. На начальной стадии развития проекта стоит соблюдать CCP, а в дальнейшем постепенно смещать фокус на REP и/или CRP.
4. Слишком много зависимостей между компонентами приводит к их неустойчивости(об этом в следующем посте), что усложняет разработку. Заключение Чтобы хорошо спроектировать свой проект пользуйтесь выше перечисленными правилами и старайтесь искать золотую середину между этими принципами. Дополнительные материалы https://books.google.com.tr/books/about/%D0%A7%D0%B8%D1%81%D1%82%D0%B0%D1%8F_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%98%D1%81.html?id=d6JSDwAAQBAJ&printsec=frontcover&source=kp_read_button&hl=ru&newbks=1&newbks_redir=0&gboemv=1&redir_esc=y