【发布时间】:2010-07-04 15:04:19
【问题描述】:
我对领域驱动设计和工作单元模式有一些不清楚的地方。 假设我有一个从存储库中检索到的实体。一旦我更新了这个实体,UnitOfWork 应该如何知道它已经更新,所以更新的实体可以持久化到数据库中? 目前,我看到两个选项:
1) 在服务层手动调用uow.Update(entity)。例如:
Employee emp = EmployeeRepository.GetByID(1);
emp.Name = "NewName";
uow.Update(emp);
uow.Commit();
2) 依靠一些 ORM 魔法来跟踪更改,并将更新的实体持久保存到数据库中。例如:
Employee emp = EmployeeRepository.GetByID(1);
emp.Name = "NewName";
uow.Commit();
这两个选项对我来说似乎很棘手: 首先 - 如果在某个聚合中进行了更改,聚合应该让服务层知道它更新了一些实体。 第二 - 不依赖 ORM 实现是否违反了持久性无知原则?
您在项目中做什么?或者也许我错过了一些东西/搞砸了一些东西并且有更好的解决方案?
谢谢
【问题讨论】: