2.6 KiB
Модули слоя domains
Пояснение размещения предметных ответственностей в обычных SLM-модулях.
Связанные правила
Обычные модули SLM
Модуль слоя domains является обычным SLM-модулем. Он отличается от модулей других слоёв только предметной ответственностью, а не отдельной архитектурной сущностью или обязательной файловой формой.
domains/auth/
├── hooks/
├── services/
├── stores/
├── types/
├── ui/
└── index.ts
Показанные каталоги являются возможными сегментами, а не обязательным каркасом. Модуль может содержать предметные типы, сценарии, состояние, framework-код, компоненты и вложенные модули.
Публичный API
Внешний код использует модуль через его обычный публичный API:
import { signOut, useSession } from '@/domains/auth'
Глубокий импорт во внутренний сегмент нарушает модульную границу:
import { useSession } from '@/domains/auth/hooks/use-session'
Groups
При большом количестве модулей слой domains может содержать обычные навигационные Groups:
domains/
├── shop/ # Group
│ ├── catalog/ # SLM-модуль
│ └── orders/ # SLM-модуль
└── cabinet/ # Group
└── profile/ # SLM-модуль
Group не имеет index.ts, реализации, состояния или публичного API. Она не создаёт dependency boundary и не реэкспортирует содержащиеся в ней модули.
Среды выполнения
Если части публичного API модуля предназначены для разных сред выполнения, модуль сохраняет одну ответственность и разделяет доступ фасетами client, browser и server.