我有一个使用干净架构模板创建的项目。
如果我想在创建新项目时引发域事件,我应该在哪里添加?
如果每当向项目中添加新项目时我必须引发事件,我可以在项目实体中完成该操作,如此处所示。
与此处完成的 ToDoItem 的 MarkCompletion类似。
但不清楚在创建新项目时将代码放在哪里引发事件?
一种选择是在此处创建端点中执行以下操作。
newProject.Events.Add(new ProjectCreatedEvent(newProject));
但这是在 UI 中,远离领域模型,所以感觉不对。
另一种选择是使用ef 核心拦截器。因此,当调用 save changes 时,只需根据需要引发事件,例如 here。
如果我在 Project ctor 中添加事件,那么即使在更新的情况下也会触发。
public Project(string name)
{
Name = Guard.Against.NullOrEmpty(name, nameof(name));
var newProjectCreatedEvent = new NewProjectCreatedEvent(this);
Events.Add(newProjectCreatedEvent);
}
有没有更好的选择/模式?
任何指针都深表感谢。