Skip to content

mpa-org/mpa-js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Микропакетная архитектура

Архитектурный подход, обеспечивающий высокий уровень организации кодовой базы.

Содержание

  1. Контекст
  2. Проблема
  3. О природе проблемы
  4. Решение
  5. Примеры
  6. Концепция
  7. Документация
  8. Интеграция
  9. Сообщество
  10. О проекте

Контекст

В программировании существует несколько уровней организации системы. Среди них важно различать:

  • архитектуру приложения
  • архитектуру кодовой базы

Первая описывает устройство системы как исполняемого объекта, вторая — устройство её представления в исходном коде.

Архитектура приложения отвечает на вопросы:

  • как система делится на подсистемы
  • как подсистемы взаимодействуют друг с другом
  • как устроен поток данных
  • и другие

Архитектура кодовой базы отвечает на вопросы:

  • как код делится на модули
  • как модули объединяются в группы
  • как модули зависят друг от друга
  • и другие

Важно отметить, что система может иметь высокий уровень организации с точки зрения архитектуры приложения, но низкий с точки зрения архитектуры кодовой базы.

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

Проблема

Организация кодовой базы является одним из ключевых факторов, влияющих на стоимость сопровождения программного продукта.

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

В связи с этим существует необходимость в архитектурном подходе, обеспечивающем высокий уровень организации кодовой базы.

О природе проблемы

Рост кодовой базы приводит к непропорциональному росту когнитивной сложности проектирования изменений.

Так, линейный рост объёма кода может сопровождаться квадратичным, экспоненциальным, а в отдельных случаях факториальным ростом когнитивной сложности — в зависимости от уровня организации.

Такая непропорциональность обусловлена особенностями архитектуры человеческого мозга, прежде всего — ограниченным объёмом рабочей памяти.

ℹ Подробнее о том, как рабочая память влияет на интеллектуальный труд, в этом материале.

Решение

Решением выступает микропакетная архитектура — архитектурный подход, обеспечивающий высокий уровень организации кодовой базы.

Микропакеты

Микропакеты — это директории, которые образуют в кодовой базе обособленные контексты с явными границами и предсказуемыми зависимостями.

Преимущества

Применение микропакетов:

  • ⛓️‍💥 снижает связанность кодовой базы
  • 📚 снижает когнитивную нагрузку
  • ⏩ снижает трудозатраты

Командная работа

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

Примеры

Ниже приведены примеры организации кодовой базы с применением микропакетной архитектуры.

Frontend-приложение

В этом примере @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

Backend-приложение

В этом примере @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

Концепция

В основе микропакетной архитектуры лежит одна ключевая сущность — микропакет. Остальные правила и соглашения строятся вокруг неё.

Это делает подход простым в освоении и применении.

Документация

Начните знакомство с микропакетной архитектурой со следующих разделов:

  1. Основы — основные принципы подхода
  2. Применение — сценарии применения подхода

Интеграция

TypeScript

Микропакетная архитектура полностью совместима с TypeScript. Дополнительная настройка окружения не требуется.

ESLint

Плагин находится в разработке.

Сообщество

@mpa_org — сообщество в Telegram.

О проекте

Микропакетная архитектура представлена сообществу усилиями @austrokhart. Спасибо всем людям и обстоятельствам, благодаря которым эта работа стала возможна.

Отдельное спасибо:

About

Архитектурный подход, обеспечивающий высокий уровень организации кодовой базы

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Contributors