Вызов репозитория из домена с шестиугольной архитектурой интерфейса

#architecture #onion-architecture #hexagonal-architecture

#архитектура #onion-архитектура #шестиугольная архитектура

Вопрос:

Мне нужно знать, соответствует ли объект (пользователь) заданным некоторым критериям. Я определил критерии в домене, и они реализуют интерфейс:

 match(User)bool
  

Теперь проблема в том, что одному критерию нужны данные другого объекта (Компании), а у пользователя есть только идентификатор компании.

Как я должен с этим справиться? Могу ли я создать интерфейс в домене (CompanyResolver) и использовать его в criterion? этот интерфейс будет реализован репозиторием.

Спасибо

Ответ №1:

ОК. Учитывая вариант использования, вы можете реализовать бизнес-логику в методе объекта пользовательского домена следующим образом, в зависимости от вашего агрегата (пользователь или компания):

 class User {
    match(Company company) {
        // your logic
    }
}
  

Или

 class Company {
    match(User user) {
        // your logic
    }
}
  

Перед вызовом этого метода необходимо подготовить все данные из репозитория.

Если вам нужны более подробные сведения, попробуйте подробнее задокументировать свою проблему.

В любом случае домен должен быть независимым от всех остальных модулей.