Куда идет проверка в шаблоне репозитория? - PullRequest
12 голосов
/ 05 января 2011

Допустим, у меня есть объект под названием Пользователь, у которого много сообщений. Мой сервис выглядит так для удаления поста:

void DeletePost(int postId, int userId);

Куда уходит мой проверочный код? (убедитесь, что у пользователя есть разрешение на удаление). Должен ли я сделать это в хранилище с 1 вызовом базы данных? Или я должен сделать эту проверку в слое Service, где я делаю 2 вызова:

  1. Получить пользователя по userId.
  2. Вызовите удаление после проверки пользователя.

У меня будет 2 репозитория, 1 для пользователя и 1 для поста, каждый из которых выглядит следующим образом:

// From the PostRepository.
void Delete(int postId); //May have to add a userId param if I do validation in repository
//From the UserRepository.
User GetUser(int userId);

Ответы [ 2 ]

10 голосов
/ 05 января 2011

Это бизнес-правило, поэтому я бы не стал размещать его на уровне доступа к данным (Repository).Я бы сказал, что лучшее место - это уровень обслуживания.

9 голосов
/ 05 января 2011

Я думаю, некоторая проверка должна произойти до того, как вы попадете в хранилище , то есть в модели домена / бизнес-уровне.

Вы можете выбрать углубленную проверку ивыполнить валидацию также на уровне хранилища;это может или не может быть хорошей идеей в зависимости от того, для чего нужна проверка;если валидация специфична для домена, то мне кажется, что валидация должна быть в модели предметной области.С другой стороны, если проверка менее специфична для домена и носит более общий характер, то наличие ее на уровне хранилища / доступа к данным означает, что проверка может быть повторно использована в других проектах, в которых уровень доступа к данным используется повторно.

...