Шестиугольная архитектура + предметно-ориентированный дизайн. Как выполнить правильное внедрение?JAVA

Программисты JAVA общаются здесь
Anonymous
Шестиугольная архитектура + предметно-ориентированный дизайн. Как выполнить правильное внедрение?

Сообщение Anonymous »

¡Привет!
В настоящее время я пытаюсь реализовать эти две архитектуры вместе с 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

Вернуться в «JAVA»