返回域对象列表的最佳实践

4
我使用DDD原则创建了一个新项目的基础架构。我有存储库,它们为域中的工厂/水合生成器提供数据。应用程序层充当外观,当请求时将域模型变为各种视图/编辑模型。
编辑模型被映射并合并回到域模型,由一个使用流畅验证的服务进行验证。任何错误都会记录并通过错误服务报告给用户。
这一切都很完美。我的担心是如何最好地生成这些域对象的列表。
有几个选择:
1)填充完整的域模型,然后将其展平为列表。域模型可以缓存为IEnumerable列表。然后将此集合展平并推送到请求的视图。
2)创建一个“投影”对象,它是域模型的轻量级表示。这将需要很少或根本不需要填充,可以通过域级别进行拉取并映射到ViewModel并显示。
3)“绕过”域,并从应用程序层调用服务生成IEnumerable。这将使域保持干净。
我担心解决方案1会重复显示域项的列表。虽然它们将被缓存,但由于域的可搜索性质,不能保证缓存会有多大好处。
欢迎提出哪种选项是最佳的建议。

2
你的想法非常正确,但不幸的是没有明确的答案。如果你的目标是简单性和代码维护,选择选项一。如果你的目标是性能,选择选项二。只有在真正必要的情况下,我才会选择选项三,但与选项二结合使用可以产生显著的速度提升。 - Morten Mertner
尤达名言 - "必须分离读和写!" - Yves Reynhout
我更喜欢第二种方法,特别是在使用ORM(如EF或NHibernate)时,投影实际上可以生成更精简的SQL和更少的数据跨越网络。 - Paul Tyng
嗨,Morten,如果你把你的回复改成答案,我会标记它为已接受。我选择了#2,因为它似乎是我当前项目的最佳解决方案。 - Chris W
1个回答

0

我更喜欢方案2。保持域模型的清晰是必要的。

通过CQS(命令查询分离),我们可以实现一个有效且轻量级的查询体系结构。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接