Files
test/.template/development/docs/adr/0005-ddd-boundaries.md
T
2026-10-09 04:24:38 +00:00

2.7 KiB
Raw Blame History

ADR-0005: DDD-границы внутри модульного Typst-монолита

Дата: 2026-08-26 Статус: Принято

Контекст

Шаблон должен расширяться новыми видами документов, но обычное использование должно оставаться простым. Один монолитный show с ветвлением по типу документа быстро свяжет корпоративные данные, file paths, domain-правила и пагинацию. Полноценные микросервисы или отдельные пакеты для каждого bounded context, напротив, избыточны для локальной Typst-библиотеки.

Рассматриваемые варианты

  1. Одна функция с if kind == ... — минимальный старт, но любое расширение меняет общее ядро и повышает риск регрессии.
  2. Модульный монолит с DDD-границами и profile contract — изоляция без инфраструктурной сложности.
  3. Отдельный Typst package для каждого вида документа — сильная физическая изоляция, но дублирование foundation и сложное совместное версионирование.

Решение

Выбрали модульный монолит со слоями Domain → Application и адаптерами Infrastructure/Presentation. Domain не импортирует presentation или infrastructure. Новый вид документа добавляется новым DocumentProfile, а не новой веткой в document().

Разрешённое направление зависимостей:

Facade → Application → Domain
            │            ▲
            ├→ Infrastructure
            └→ Presentation → Shared Components

Presentation и Infrastructure могут создавать domain-значения или читать их, но не изменяют domain-инварианты.

Последствия

Становится проще: добавление договора или другого профиля, независимые fixtures и локализация show/state.

Становится сложнее: необходимо поддерживать явные contracts и проверять import graph.

Закрывает дверь на: доступ domain-модулей к JSON, image, page, context и глобальным renderer-state.