Образец направленных границ компонента¶
Ненормативный пример. Иллюстрирует
ARC-PAT-001,ARC-PAT-002,ARC-PAT-003иARC-PAT-004. Запрещено копировать структуру каталогов или названия элементов в прикладной проект без повторного проектирования.
Ограничения применимости: пример рассматривает один backend-компонент с прикладным правилом, двумя точками входа, хранилищем и внешним provider. Он не определяет framework, протоколы, транзакционную модель, формат данных или production-конфигурацию.
Выбор минимальной формы¶
| Наблюдаемое условие | Минимальная достаточная форма |
|---|---|
| Компонент только проверяет и передаёт внешний контракт | Один adapter без отдельного прикладного слоя |
| Одно прикладное правило вызывается из одной точки входа | Одна функция операции; отдельные интерфейсы только для фактических внешних границ |
| Одно правило вызывается из HTTP и consumer | Общая прикладная операция и два входных adapter |
| Фактически используются две реализации provider | Принадлежащий проекту port и два выходных adapter |
Таблица показывает частные варианты, а не вводит новые обязанности. Наличие
слова service, repository, use case или port в имени не доказывает
соответствие требованиям.
Допустимое направление зависимостей¶
Стрелка A -> B означает, что исходный код A имеет статическую зависимость от
B.
http-adapter -----\
-> approve-order
event-adapter ----/ |-> order-store-port <- postgres-adapter
\-> payment-port <- payment-adapter
approve-order содержит единственную реализацию правила подтверждения заказа.
Входные adapter преобразуют transport input и вызывают эту операцию.
order-store-port и payment-port принадлежат проекту; выходные adapter
реализуют их без обратного import из прикладной операции.
Допустимо¶
- HTTP adapter и event adapter вызывают одну операцию
approve-order. - Прикладная операция возвращает проектный результат
approved,already-approvedилиrejected. - HTTP adapter отдельно преобразует результат в status code, а event adapter — в подтверждение или отклонение сообщения.
- Статическая проверка запрещает import HTTP, broker, ORM и provider SDK из прикладной операции.
Недопустимо¶
- HTTP handler записывает заказ напрямую, обходя правило подтверждения.
- Event consumer содержит копию правила с другим набором проверок.
- Прикладная операция возвращает HTTP response или исключение конкретного ORM.
approve-orderимпортируетpostgres-adapter, а тот импортируетapprove-order.- Интерфейс добавлен между двумя функциями, но не изолирует фактическую границу, реализацию или направление зависимости.
Возможные проверки¶
- построить статический import graph и отклонить запрещённое направление или цикл;
- запустить unit-тест
approve-orderбез сети, базы данных и framework; - передать одинаковый отклоняемый заказ через обе входные точки и подтвердить отсутствие записи и внешнего вызова;
- выполнить contract-тест преобразования project result в контракт каждой точки входа.