Сервисы с отслеживанием состояния в приложении iOS с учетом DDD - PullRequest
0 голосов
/ 16 июня 2020

Прочитав множество статей о принципах 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? На основании вышеизложенного я пришел к выводу, что нет, поскольку у объекта слишком много ответственности, чтобы быть репозиторием; поскольку объект имеет состояние, чтобы быть службой. Буду признателен за любое мнение по этому поводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...