Initial commit

This commit is contained in:
malysheva committed 2026-10-09 04:24:38 +00:00
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.