如果我的领域模型不应该知道/关心存储库,那么像.UpdateOrder(...)这样的行为如何封装CRUD,以及与Repository的接口呢?通过域名服务?
好的,那么我的存储库有一个有效的CRUD,它与我的.UpdateOrder(...)一起使用。这很好。但是我不希望有人在存储库上使用更新方法,我希望他们在实体上进行行为(使用UpdateOrder()代替)。我更希望我的领域模型满足不变量的方式--通过它的设计(私有集属性等)--我的存储库不公开“更新”/persisting实体的替代方法。
这仅仅是一个访问修饰符问题,由我在Repo public中没有更新方法来解决。还是有更好的答案?请帮助我DDD忍者。
发布于 2010-12-03 14:48:48
DDD的严格顺序是:
var entityRepository = MyServiceLocator.Get<IEntityRepository>();
var myEntity = entityRepository.Load(<some criteria>);
myEntity.Change(something);
entityRepository.Save(myEntity);存储库始终负责检测/持久化实体中的所有更改。
(顺便说一句,我假设你的实体是一个聚合根)
发布于 2010-12-03 14:52:48
如果您的域模型不包括持久性,那么它不包括存储某些内容的操作。如果您的实体是来自域模型的东西,那么它就不需要自己持久化。
你说:
,这很好。但我不希望有人在存储库上使用更新方法,我希望他们在实体上进行行为
但我觉得这是错的。您的域对象对持久化没有更多的责任,就像它们打印自己、在屏幕上绘制自己一样。域类不应该有UpdateOrder方法。
现在,您可能不想将原始存储库(从您的持久性实现层)公开给其他代码,但这只是意味着将它封装在合适的东西中。听起来你确实有一些代码需要讨论持久性,所以找出它需要在哪个层次上进行讨论,并向它公开一个合适的接口。
https://stackoverflow.com/questions/4336819
复制相似问题