В настоящее время я пытаюсь реализовать эти две архитектуры вместе с Java и Spring (хотя технология, я думаю, не имеет значения).
Но у меня возникли проблемы с их совместной работой.
Я понимаю, что мое приложение должно иметь структуру с 3 слоями и 2 зонами (внутри и снаружи шестиугольника):
Домен: объекты, которые должны быть автономными со своими собственными функциями: репозитории, объекты ValueObject, фабрики, события и т. д. Этот слой является центром шестиугольника. .
Приложение: Где должны быть найдены порты. Я также видел, что именно здесь обычно реализуются REST или «входные» адаптеры. Этот слой находится на краю шестиугольника.
Инфраструктура: реализация выходных портов, где уже должны использоваться внешние библиотеки и фреймворки. Этот слой находится за пределами шестиугольника.
Но это вызывает у меня несколько вопросов. Почему адаптеры обычно реализуются на уровне приложений или на уровне инфраструктуры, в зависимости от того, являются ли они входными или выходными?
Что делают репозитории и доменные службы? Разве они не должны быть на уровне приложений в качестве интерфейсов, а инфраструктура должна их реализовывать? В конце концов, вся логика должна находиться в сущности.
Сейчас у меня есть вот такая структура (после выполнения нескольких руководств и просмотра некоторых репозиториев на GitHub):
Магазин (Базовый модуль)
Код: Выделить всё
Shop-Domain (Submodule)
src/main/java
├─── net.test.sell.domain
│ └─── error (exceptions related)
│ └─── model (Entities, ValueObjects, Events, etc...)
├─── net.test.workers.domain
....
Shop-Application (Submodule)
src/main/java
├─── net.test.sell.aplication
│ └─── ports
| └─── input (implementation of use cases)
└─── output (interfaces for infrastructure submodule)
│ └─── use_cases (interfaces)
├─── net.test.workers.application
Shop-Infrastructure (Submodule)
src/main/java
├─── net.test.sell.infrastructure
│ └─── database
| └─── adapters (implementation output interfaces)
│ └─── rest_api(interfaces)
| └─── controllers (just REST Controllers)
├─── net.test.workers.infrastructure
...
Почему входные порты используют варианты использования, а выходные порты — это интерфейсы, которые реализуются позже в инфраструктуре?
Хороша ли практика реализовывать каждый небольшой вариант использования в отдельном интерфейсе? Или можно все сделать в одном?
Наконец-то. Каково правильное соглашение об именах для различных проектов и пакетов?
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/790 ... t-implemen