Domains: рабочие заметки
Статус: исследовательский черновик. Материалы в этой папке не являются спецификацией и пока не задают обязательных правил SLM.
Эта папка фиксирует текущую гипотезу о новой сущности Domain, business-модуле внутри неё, framework-neutral factory, ports, adapters, presets и framework bindings.
Level 3 развивает доменный модуль Level 2 в строгую доменную границу с несколькими модулями разных ролей. Такой переход может потребовать рефакторинга, но сохраняет предметного владельца и базовые модульные правила.
Идентификаторы вида DOM-N001 и FAC-N001 являются стабильными якорями заметок. Они нужны для обсуждения и последующего переноса решений в спецификацию, но не являются идентификаторами нормативных правил.
Основная формула
Business определяет ЧТО делать.
Ports описывают ЧТО business нужно.
Factory создаёт business API из ports.
Adapters реализуют ports в конкретной среде.
Preset выбирает adapters, scope и lifecycle.
Framework binding подключает готовый API к React, Vue, Next.js и другим фреймворкам.
Краткая схема:
┌─ browser preset
├─ SSR request preset
Business factory + ports ├─ server action preset
├─ per-test assembly
└─ другой application preset
готовый business API instance
├─ framework bindings
├─ compositions
└─ другие business factories через ports
Зафиксированные гипотезы
DOM-N001: Domain является отдельной архитектурной сущностью
Domain является границей владения одной предметной областью. Он содержит modules и logical groups с разной технической ролью, но общей доменной принадлежностью.
DOM-N002: Business внутри Domain является модулем
business имеет собственную ответственность и public API, поэтому это module, а не segment. types/, services/, errors/ и lib/ внутри business остаются segments.
FAC-N001: Один business-контракт имеет одну factory
Разные среды выполнения не требуют разных factories, если они предоставляют один и тот же API. Различия среды выражаются ports, adapters и presets.
PRE-N001: Одна factory допускает несколько presets
Browser, SSR, server action, tests и другие контексты могут собирать одну factory с разными реализациями ports.
FAC-N002: Business и factory нейтральны к framework и environment
Изоморфный business import graph не достигает React, Vue, Next.js, browser-only, server-only, SDK, storage implementations и других concrete runtimes.
PRE-N002: Среда является свойством preset
Client/server/request различия определяются preset и выбранными adapters, а не mode внутри factory. Tests создают отдельную per-test assembly напрямую через factory и не требуют общего test preset.
Карта заметок
- Domain - роль новой сущности, структура и публичные границы.
- Business - ответственность business-модуля, types, pure functions и errors.
- Factory, ports и adapters - контракт factory и требования изоморфности.
- Presets и SSR - варианты сборки, lifecycle и защита server-only кода.
- Framework bindings - React/Vue/Next-код внутри Domain.
- Тестирование - границы тестов, factory-level contract, harness, adapters, presets, framework и UI.
- Auth как проверочный пример - применение гипотез к реальному модулю.
- Открытые вопросы - решения, которые ещё нельзя превращать в правила.
Предварительная структура приложения
src/
├── app/
├── compositions/
├── domains/
├── infra/
├── ui/
└── shared/
domains/ пока рассматривается как новая верхнеуровневая область, заменяющая разнесение одной доменной ответственности между business/{domain} и compositions/business/{domain}.