Я работаю в архитектуре 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 разных события, чтобы отслеживать изменения ;