【问题标题】:Return a list of domain objects best practice返回域对象列表最佳实践
【发布时间】:2012-01-30 12:31:54
【问题描述】:

我已经使用 DDD 原则为一个新项目创建了基础架构。我有为域中的工厂/水合器提供资源的存储库。应用层充当门面,在请求时将域模型展平为各种查看/编辑模型。

编辑模型被映射并合并回域模型,由使用流式验证的服务进行验证。任何错误都会被记录并通过错误服务报告给用户。

这一切都完美无缺。我现在关心的是如何最好地生成这些域对象的列表。

想到几个选项:

1) 水合完整的域模型,然后将它们展平为一个列表。域模型可以缓存为 IEnumerable 列表。然后这个集合被展平并推送到请求视图。

2) 创建一个“投影”对象,它是域模型的轻量级表示。这几乎不需要水合,并且可以通过域级别拉动并映射到视图模型并显示。

3) “绕过”域并从应用层调用一个服务,该服务生成 IEnumerable。这将使域保持干净。

我担心解决方案 1 会因为显示域项目列表而变得繁重。虽然它们会被缓存,但由于域的可搜索性,缓存不会有什么好处。

任何关于最佳选择的建议将不胜感激。

【问题讨论】:

  • 你对金钱的想法是对的,但不幸的是,没有明确的答案。如果您的目标是简单性和代码维护,请选择选项一。如果您的目标是性能,请选择选项 2。如果确实需要,我只会选择选项 3,但与选项 2 结合使用可以显着提高速度。
  • 尤达语录 - “你必须做的就是分离读取和写入!”
  • 我更喜欢 #2 方法,尤其是使用 EF 或 NHibernate 之类的 ORM 时,投影实际上可以生成更精简的 SQL,并且通过网络传输的数据更少。
  • 嗨 Morten,如果您将回复更改为答案,我会将其标记为已接受。我选择了 #2,因为它似乎是我当前项目的最佳解决方案。

标签: c# asp.net-mvc-3 domain-driven-design


【解决方案1】:

我更喜欢解决方案 2。保持域模型干净是必要的。

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

【讨论】:

    猜你喜欢
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    相关资源
    最近更新 更多