Архитектурный подход, обеспечивающий высокий уровень организации кодовой базы.
- Контекст
- Проблема
- О природе проблемы
- Решение
- Примеры
- Концепция
- Документация
- Интеграция
- Сообщество
- О проекте
В программировании существует несколько уровней организации системы. Среди них важно различать:
- архитектуру приложения
- архитектуру кодовой базы
Первая описывает устройство системы как исполняемого объекта, вторая — устройство её представления в исходном коде.
Архитектура приложения отвечает на вопросы:
- как система делится на подсистемы
- как подсистемы взаимодействуют друг с другом
- как устроен поток данных
- и другие
Архитектура кодовой базы отвечает на вопросы:
- как код делится на модули
- как модули объединяются в группы
- как модули зависят друг от друга
- и другие
Важно отметить, что система может иметь высокий уровень организации с точки зрения архитектуры приложения, но низкий с точки зрения архитектуры кодовой базы.
Таким образом, архитектуру приложения и архитектуру кодовой базы следует рассматривать как два разных уровня организации системы.
Организация кодовой базы является одним из ключевых факторов, влияющих на стоимость сопровождения программного продукта.
Низкий уровень организации повышает когнитивную сложность проектирования изменений, что приводит к увеличению трудозатрат.
В связи с этим существует необходимость в архитектурном подходе, обеспечивающем высокий уровень организации кодовой базы.
Рост кодовой базы приводит к непропорциональному росту когнитивной сложности проектирования изменений.
Так, линейный рост объёма кода может сопровождаться квадратичным, экспоненциальным, а в отдельных случаях факториальным ростом когнитивной сложности — в зависимости от уровня организации.
Такая непропорциональность обусловлена особенностями архитектуры человеческого мозга, прежде всего — ограниченным объёмом рабочей памяти.
ℹ Подробнее о том, как рабочая память влияет на интеллектуальный труд, в этом материале.
Решением выступает микропакетная архитектура — архитектурный подход, обеспечивающий высокий уровень организации кодовой базы.
Микропакеты — это директории, которые образуют в кодовой базе обособленные контексты с явными границами и предсказуемыми зависимостями.
Применение микропакетов:
- ⛓️💥 снижает связанность кодовой базы
- 📚 снижает когнитивную нагрузку
- ⏩ снижает трудозатраты
Микропакеты явно разграничивают кодовую базу, позволяя эффективно распределять ответственность между несколькими разработчиками или командами.
Ниже приведены примеры организации кодовой базы с применением микропакетной архитектуры.
В этом примере
@api,@ui_kit,app,app.auth,app.billing,app.billing.invoice,app.billing.historyиapp.billing@shared— микропакеты.
src/
├── @api
│ ├── #client
│ ├── consts
│ ├── hooks
│ └── index.js
├── @ui_kit
│ ├── components
│ ├── icons
│ ├── tokens
│ └── index.js
├── app
│ ├── #app
│ ├── components
│ ├── consts
│ └── index.js
├── app.auth
│ ├── #page
│ ├── components
│ ├── forms
│ └── index.js
├── app.billing
│ ├── #page
│ ├── components
│ ├── consts
│ └── index.js
├── app.billing.history
│ ├── #page
│ ├── components
│ ├── helpers
│ └── index.js
├── app.billing.invoice
│ ├── #page
│ ├── components
│ ├── helpers
│ └── index.js
└── app.billing@shared
├── consts
├── contexts
├── hooks
└── index.js
В этом примере
@auth,@db,app,app.auth,app.billing,app.billing.history,app.billing.invoiceиapp.billing@shared— микропакеты.
src/
├── @auth
│ ├── guards
│ ├── helpers
│ ├── services
│ └── index.js
├── @db
│ ├── configs
│ ├── entities
│ ├── migrations
│ └── index.js
├── app
│ ├── #app
│ ├── controllers
│ ├── services
│ └── index.js
├── app.auth
│ ├── #module
│ ├── controllers
│ ├── services
│ └── index.js
├── app.billing
│ ├── #module
│ ├── controllers
│ ├── services
│ └── index.js
├── app.billing.history
│ ├── controllers
│ ├── services
│ ├── templates
│ └── index.js
├── app.billing.invoice
│ ├── controllers
│ ├── services
│ ├── templates
│ └── index.js
└── app.billing@shared
├── consts
├── errors
├── helpers
└── index.js
В основе микропакетной архитектуры лежит одна ключевая сущность — микропакет. Остальные правила и соглашения строятся вокруг неё.
Это делает подход простым в освоении и применении.
Начните знакомство с микропакетной архитектурой со следующих разделов:
Микропакетная архитектура полностью совместима с TypeScript. Дополнительная настройка окружения не требуется.
Плагин находится в разработке.
@mpa_org — сообщество в Telegram.
Микропакетная архитектура представлена сообществу усилиями @austrokhart. Спасибо всем людям и обстоятельствам, благодаря которым эта работа стала возможна.
Отдельное спасибо:
- @daryabratova ❤️
- @kindaro 💛
- @ruzovska 💛
- @metaholf 💛