docs: обновить архитектуру SLM compositions
All checks were successful
CI/CD Pipeline / build (push) Successful in 44s
CI/CD Pipeline / docker (push) Successful in 1m17s
CI/CD Pipeline / deploy (push) Successful in 8s

- обновлена модель слоёв на app → compositions → business → infra → ui → shared
- добавлены правила composition modules и providers-сегмента
- обновлены правила монорепозитория для слоя compositions
- переписаны React-примеры под page-level композицию
- добавлен пример вариантов структуры compositions
This commit is contained in:
2026-05-26 23:46:11 +03:00
parent 9a962f37b5
commit 89cc873c19
10 changed files with 503 additions and 329 deletions

View File

@@ -1,27 +1,29 @@
---
title: Композиция фабрик
description: Пример композиции business-фабрик на уровне screen-модуля в React-проекте
description: Пример композиции business-фабрик на уровне composition module в React-проекте
---
# Композиция фабрик
Раздел показывает, как собрать API нескольких business-модулей в React screen-модуле. Пример подходит для простой композиции, когда screen сам является точкой использования доменов.
Раздел показывает, как собрать API нескольких business-модулей в React composition module. Пример подходит для простой композиции, когда page composition сама является точкой использования доменов.
## Идея
Композиция фабрик выполняется в модуле-потребителе: screen, layout или другом модуле группы «Композиция». Business-модули не импортируют runtime-код друг друга напрямую, а cross-domain зависимости получают только через аргументы фабрик.
Композиция фабрик выполняется в модуле-потребителе на слое `compositions`: page, layout, screen, widget или другом composition module.
## Структура screen-модуля
Business-модули не импортируют runtime-код друг друга напрямую, а cross-domain зависимости получают только через аргументы фабрик.
## Структура page composition
```text
screens/home/
├── home.screen.tsx
compositions/pages/home/
├── home.page.tsx
└── index.ts
```
## Сборка фабрик
Файл: `screens/home/home.screen.tsx`.
Файл: `compositions/pages/home/home.page.tsx`.
```tsx
import { customerFactory } from '@/business/customer'
@@ -32,7 +34,7 @@ const order = orderFactory({ customer })
const { useOrder, OrderCard } = order
export const HomeScreen = () => {
export const HomePage = () => {
const currentOrder = useOrder()
return <OrderCard order={currentOrder} />
@@ -41,12 +43,12 @@ export const HomeScreen = () => {
`customerFactory` создаётся первой, потому что `orderFactory` зависит от части API домена `customer`. Модуль `order` не импортирует `customer` в runtime — зависимость передаётся снаружи.
## Публичный API screen-модуля
## Публичный API page composition
Файл: `screens/home/index.ts`.
Файл: `compositions/pages/home/index.ts`.
```ts
export { HomeScreen } from './home.screen'
export { HomePage } from './home.page'
```
Screen экспортирует только собственный публичный API. Собранные экземпляры business API остаются деталями реализации screen-модуля.
Page composition экспортирует только собственный публичный API. Собранные экземпляры business API остаются деталями реализации модуля.