Должна ли организация иметь возможность вызывать хранилище в архитектуре CQRS, используя модель предметной области? - PullRequest
0 голосов
/ 10 марта 2020

Я работаю в архитектуре CQRS, используя модель предметной области. Мне пришлось разработать функцию добавления события для определенного пользователя c (который является сущностью). В то время я задавался вопросом, как мне обрабатывать:

1) Сущность может изменить себя, вызывая хранилище напрямую в методе.

2) служба команд может выполнить указанную команду c чтобы изменить мою сущность в базе данных.

3) Смешав 2, командная служба может вызвать метод сущности, который выполняет команду, которая изменяет сущность в базе данных.

После Несколько обсуждений с коллегами, я выбрал первый вариант, потому что модификация была простой, и я не хотел делать модель предметной области анеми c, как описывает Мартин Фаулер . Но теперь некоторые из моих коллег говорят мне, что объект не должен вызывать напрямую объект, поэтому мы должны изменить способ, которым я его кодировал. Может быть, я неправильно истолковал то, что сказал Фаулер?

Как вы думаете, что нам тогда делать?

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

Небольшое описание того, как выглядит текущий метод в сущности

public void UpdateOption(bool activateOption)
{
     var repository = new Repository();

     if(activateOption)
        repository.SaveEvt(this, new EvtActivateOption(this.Id, Datetime.Now));
     else
        repository.SaveEvt(this, new EvtDesactivateOption(this.Id, Datetime.Now));
}

FYI => У нас есть 2 разных события, чтобы отслеживать изменения ;

...