Прочитав множество статей о принципах DDD, у меня возникли сомнения относительно контекста использования репозиториев и сервисов.
На мой взгляд, Репозиторий - это объект, который предоставляет действия CRUD для некоторого объекта домена (очень похоже на DAO).
В этом case, Service - это объект, который предоставляет методы, реализующие бизнес-операции.
Но в книге Domain-Driven Design Эри c Эванс пишет об услугах следующее:
Хороший сервис имеет три характеристики:
- Операция относится к концепции домена, которая не является естественной частью объекта Entity или Value.
- Интерфейс определяется в терминах других элементов модели предметной области.
- Операция без состояния .
Для меня без состояния означают, что у службы не должно быть свойств, которые изменяются в результате выполнения методов (тем самым изменяя состояние). Однако служба может иметь свойства, необходимые для предоставления некоторых данных. Похоже, у нас может быть такая связь: Сервис -> Репозиторий , а не наоборот
Как разработчик iOS я взял в качестве примера с объект, который выглядит как сервис (это просто пример, он не будет компилироваться):
final class ObtainDataService: ObtainDataServiceProtocol {
private var userDefaultsProvider = UserDefaultsProvider()
private var wasUpdatedFromLastOne = false
private var fetchedDataResult = [DataResultModel]()
private var changedDataResult = [DataResultModel]()
private var isFetchingNow = false
func fetch() {
...
...
private var isFetchingNow = true
userDefaultsProvider.fetch()
private var isFetchingNow = false
...
fetchedDataResult = ....
changedDataResult = ....
wasUpdatedFromLastOne = fetchedDataResult != changedDataResult
}
func filterFetchedDataResult() {
fetchedDataResult = fetchedDataResult.filter { $0.active }
}
Вопрос в том, может ли этот объект быть репозиторием или сервисом в контексте DDD? На основании вышеизложенного я пришел к выводу, что нет, поскольку у объекта слишком много ответственности, чтобы быть репозиторием; поскольку объект имеет состояние, чтобы быть службой. Буду признателен за любое мнение по этому поводу.