Подтвердить что ты не робот

Вызов репозитория из репозитория

У меня есть два каталога и пользователя репозиториев, у меня есть ситуация, когда мне нужно вызвать метод в репозитории каталога из пользовательского репо, это хорошая практика или есть лучший способ?

4b9b3361

Ответ 1

Вы не должны обрабатывать такие проверки авторизации в своих репозиториях. Бизнес-правило типа "Этот пользователь требует, чтобы комментарии X были отправлены" на самом деле не является репозиторием, это свойство вашего пользователя.

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

Вы должны правильно загрузить эти разрешения в свой пользовательский объект, который затем кэшируется для текущего запроса и использует ваш домен:

public class Service {

    public void Save(Post post)
    {
        if(User.GetCurrentUser().HasEnoughCommentsToPost())
            postRepository.Add(post);
    }

}

Ответ 2

Я бы ссылался на другой репозиторий на верхнем уровне, например на сервисный уровень

Ответ 3

Я думаю, что в вашем случае авторизация является частью вашей логики домена. Поэтому я бы создал абстрактный класс или интерфейс под названием AuthorizationPolicy (возможно, вы можете найти лучшее имя ближе к вашему домену) в моем домене. Прежде чем вы вызовете метод в репозитории, клиент должен проверить, имеют ли они разрешение на основе политики.

Другое решение, поскольку интерфейс репозитория также является частью бизнес-логики, вы можете создать базовый класс для своего репозитория, который проверяет права доступа пользователя и делегирует остальные производным классам.

Реализация AuthorizationPolicy будет работать с классом Catalog, если вы хотите. Таким образом, два репозитория хорошо развязаны.