Initial commit
This commit is contained in:
commit
c534d5ce80
163 files changed
+11500
No files matched your search
@@ -0,0 +1,37 @@
|
||||
# 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()`.
|
||||
|
||||
Разрешённое направление зависимостей:
|
||||
|
||||
```text
|
||||
Facade → Application → Domain
|
||||
│ ▲
|
||||
├→ Infrastructure
|
||||
└→ Presentation → Shared Components
|
||||
```
|
||||
|
||||
Presentation и Infrastructure могут создавать domain-значения или читать их, но не изменяют domain-инварианты.
|
||||
|
||||
## Последствия
|
||||
|
||||
**Становится проще**: добавление договора или другого профиля, независимые fixtures и локализация `show/state`.
|
||||
|
||||
**Становится сложнее**: необходимо поддерживать явные contracts и проверять import graph.
|
||||
|
||||
**Закрывает дверь на**: доступ domain-модулей к JSON, `image`, `page`, `context` и глобальным renderer-state.
|
||||
Reference in new issue
Block a user