У меня есть два каталога и пользователя репозиториев, у меня есть ситуация, когда мне нужно вызвать метод в репозитории каталога из пользовательского репо, это хорошая практика или есть лучший способ?
Вызов репозитория из репозитория
Ответ 1
Вы не должны обрабатывать такие проверки авторизации в своих репозиториях. Бизнес-правило типа "Этот пользователь требует, чтобы комментарии X были отправлены" на самом деле не является репозиторием, это свойство вашего пользователя.
Кроме того, вызовы авторизации очень часто применяются в приложении, и вы действительно не хотите ударять свою базу данных каждый раз, когда требуется проверка.
Вы должны правильно загрузить эти разрешения в свой пользовательский объект, который затем кэшируется для текущего запроса и использует ваш домен:
public class Service {
public void Save(Post post)
{
if(User.GetCurrentUser().HasEnoughCommentsToPost())
postRepository.Add(post);
}
}
Ответ 2
Я бы ссылался на другой репозиторий на верхнем уровне, например на сервисный уровень
Ответ 3
Я думаю, что в вашем случае авторизация является частью вашей логики домена. Поэтому я бы создал абстрактный класс или интерфейс под названием AuthorizationPolicy (возможно, вы можете найти лучшее имя ближе к вашему домену) в моем домене. Прежде чем вы вызовете метод в репозитории, клиент должен проверить, имеют ли они разрешение на основе политики.
Другое решение, поскольку интерфейс репозитория также является частью бизнес-логики, вы можете создать базовый класс для своего репозитория, который проверяет права доступа пользователя и делегирует остальные производным классам.
Реализация AuthorizationPolicy будет работать с классом Catalog, если вы хотите. Таким образом, два репозитория хорошо развязаны.