Перейти к содержанию

Образец направленных границ компонента

Ненормативный пример. Иллюстрирует 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 в контракт каждой точки входа.