2026-05-13 10:12:31 +03:00
---
title: Композиция фабрик
2026-05-26 23:46:11 +03:00
description: Пример композиции business-фабрик на уровне composition module в React-проекте
2026-05-13 10:12:31 +03:00
---
# Композиция фабрик
2026-05-26 23:46:11 +03:00
Раздел показывает, как собрать API нескольких business-модулей в React composition module. Пример подходит для простой композиции, когда page composition сама является точкой использования доменов.
2026-05-13 10:12:31 +03:00
## Идея
2026-05-26 23:46:11 +03:00
Композиция фабрик выполняется в модуле-потребителе на слое `compositions` : page, layout, screen, widget или другом composition module.
2026-05-13 10:12:31 +03:00
2026-05-26 23:46:11 +03:00
Business-модули не импортируют runtime-код друг друга напрямую, а cross-domain зависимости получают только через аргументы фабрик.
## Структура page composition
2026-05-13 10:12:31 +03:00
```text
2026-05-26 23:46:11 +03:00
compositions/pages/home/
├── home.page.tsx
2026-05-13 10:12:31 +03:00
└── index.ts
```
## Сборка фабрик
2026-05-26 23:46:11 +03:00
Файл: `compositions/pages/home/home.page.tsx` .
2026-05-13 10:12:31 +03:00
```tsx
import { customerFactory } from '@/business/customer '
import { orderFactory } from '@/business/order '
const customer = customerFactory()
const order = orderFactory({ customer })
const { useOrder, OrderCard } = order
2026-05-26 23:46:11 +03:00
export const HomePage = () => {
2026-05-13 10:12:31 +03:00
const currentOrder = useOrder()
return < OrderCard order = {currentOrder} / >
}
```
`customerFactory` создаётся первой, потому что `orderFactory` зависит от части API домена `customer` . Модуль `order` не импортирует `customer` в runtime — зависимость передаётся снаружи.
2026-05-26 23:46:11 +03:00
## Публичный API page composition
2026-05-13 10:12:31 +03:00
2026-05-26 23:46:11 +03:00
Файл: `compositions/pages/home/index.ts` .
2026-05-13 10:12:31 +03:00
```ts
2026-05-26 23:46:11 +03:00
export { HomePage } from './home.page'
2026-05-13 10:12:31 +03:00
```
2026-05-26 23:46:11 +03:00
Page composition экспортирует только собственный публичный API. Собранные экземпляры business API остаются деталями реализации модуля.