gpt4 book ai didi

c# - 保存域实体更改

转载 作者:可可西里 更新时间:2023-11-01 08:45:42 25 4
gpt4 key购买 nike

这里有一个真实的例子,可以引出我的问题:我有一个 AddCommentToArticleCommand,它有一个 ArticleId、评论文本和电子邮件地址。这个命令:

  • 使用文章库获取文章(领域实体)
  • 如果文章存在,它会调用 article.AddComment(commentText, emailAddress),将评论添加到文章中,如果不能添加则抛出异常(由于电子邮件格式无效、文章已关闭、评论未填写等)长等等...)
  • 但现在我不知道保存添加的评论的最佳方法是什么?

我应该做类似 articleRepository.Save(article) 的事情吗?但是,如果只是添加评论,我为什么要保存文章?或者我可以做类似 articleRepository.SaveComment(comment) 的事情,它只会保存评论吗?或者你会在这里采取什么方法?

谢谢!

最佳答案

作为MattDavey指出,在 DDD 中你通常会想到 Aggregate生命周期,与 CRUD 持久性问题无关。 Aggregate 生命周期的中期和末期由相应的 Repository 处理。 .关于您的具体问题:

but now I don't know what the best way is to save the added comment?

处理这个问题的最好方法是找到一个可靠的 ORM 并实现你的

articles.MakePersistent(article)

使用此 ORM 的存储库方法。好的ORM会实现UnitOfWork ,将包括脏跟踪、延迟加载和其他与持久性相关的问题,而不会限制您的域对象。 ORM 知道如何在保存聚合时避免不需要的 SQL INSERT/UPDATE。您的域对象应该尽可能持久无知。例如,NHibernate 对您的对象施加的唯一约束是它们应该具有私有(private)默认构造函数。除此之外,它们可以是不了解所有持久性问题的简单 POCO 对象。需要明确的是,域对象不应具有 IsTransientIsDirty 标志。如果您发现自己正在编写使用这些标志的代码,那么您就是 reinveting the wheel .

关于c# - 保存域实体更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7496094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com