L-F*_*our 11 c# entity domain-driven-design repository cqrs
这是一个真实的例子,它将引出我的问题:我有一个AddCommentToArticleCommand,它有一个ArticleId,评论文本和电子邮件地址.这个命令:
我应该像articleRepository.Save(文章)那样做吗?但是,如果只添加评论,为什么要保存文章呢?或者我可以做一些像articleRepository.SaveComment(评论),只会保存评论?或者你会采取什么方法?
谢谢!
正如MattDavey指出的那样,在DDD中,您通常会考虑聚合生命周期,而不是CRUD持久性问题.Aggregate的生命中期和结束由相应的Repository处理.关于你的具体问题:
但现在我不知道保存添加的评论的最佳方法是什么?
处理这个问题的最好方法是找到一个可靠的ORM并实现你的
articles.MakePersistent(article)
Run Code Online (Sandbox Code Playgroud)
使用此ORM的存储库方法.好的ORM将实现UnitOfWork,将包括脏跟踪,延迟加载和其他持久性相关问题,而不会限制域对象.ORM知道如何在保存聚合时避免不需要的SQL INSERT/UPDATE.您的域对象应尽可能持久无知.例如,NHibernate对您的对象施加的唯一约束是它们应该具有私有默认构造函数.除此之外,他们可以是简单的POCO对象,不知道所有持久性问题.只是为了清除,域对象不应该有IsTransient
或IsDirty
标志.如果你发现自己编写了使用这些标志的代码,那么你正在重新启动方向盘.
归档时间: |
|
查看次数: |
3065 次 |
最近记录: |