Domain-Driven Design — функции репозиториев?

Всем доброго времени суток!


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


В связи с этим меня уже давно мучает идеологический вопрос, хочу посоветоваться на эту тему с хабрасообществом: а какие именно функции, помимо банальных FindAll и FindById (ну и Create/Save/Delete) должны включаться в репозитории? Если наше приложение оперирует сущностями типа Пользователь или Сотрудник — наверняка будут необходимы функции по загрузке всех активных пользователей, или пользователей, не появлявшихся на сайте больше полугода. Или, допустим, метод по получению количества пользователей, ещё не активировавших свой аккаунт. Какой класс должен отвечать за подобное? С одной стороны, логично подобные методы помещать в соответствующие репозитории, но с другой — нам ведь не нужны сами сущности, нам нужна некая проекция.


Какие у кого есть мысли на этот счёт?
  • Вопрос задан
  • 4258 просмотров
Решения вопроса 1
deilux
@deilux Автор вопроса
Перечитал ещё раз главу про репозитории в книге Эванса. Он пишет, что репозиторий может содержать методы по поиску объектов по значениям их атрибутов. В более общих случаях, в репозиторий можно включать методы, принимающие на вход спецификации. А также — что меня больше всего и интересовало, Эванс явно подтверждает, что в интерфейс репозитория можно включать методы, возвращающие результат простых операций над объектами (по заданному критерию). Отлично, вопрос решён!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@dborovikov
Угу, есть еще один забавный момент. Интерфейс collection-like, поэтому метод save (или update) — опционален. Как правило я не делаю. У мен что-то вроде put, get, getAll(), getAllBySpecification(). Метод delete тоже часто отсутсвует, как-то обычно удобнее логическое удаление флажком.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы