【问题标题】:Where to expose the results of a specific SQL query in the domain model在哪里公开域模型中特定 SQL 查询的结果
【发布时间】:2009-06-11 04:30:44
【问题描述】:

在这些示例中,哪一个是展示包含特定产品的特定人员的订单集合的最佳方式?为什么?或者也许有更好的方法来一起做这件事? (对不起,我是域建模的新手)。使用 SQL 查询从数据库中提取 Orders 列表并转换为 List 集合。

一个人有一对多的订单,一个订单有一对多的产品。

1) class Person { List OrdersContaining(Product p) {.....} } 2) class Order { List ForPersonContainingProduct(Person person, Product product) {.....} } 2) class Product { List OrdersFor(Person p) {.....} }

【问题讨论】:

    标签: oop domain-driven-design entity-relationship


    【解决方案1】:

    我不会直接在域对象本身上公开这样的方法,它封装了数据。相反,我会使用应用于 Order 域的 DAO 模式。从本质上讲,这是您的 #2 的变体:

    class OrderDAO {
        List<Order> listByPersonAndProduct(Person person, Product product){
            .....
        }
    }
    

    这样,随着时间的推移,您需要添加的各种访问模式与 Order 域对象分离。

    【讨论】:

    • 谢谢,这很有帮助。我能问一下,在关系更简单的情况下你会怎么做?人员和所有相关订单。您会将其建模为 Orders DAO 上的另一种方法,还是将其建模为 Person.Orders 集合? Person.Orders 可以调用 OrdersDAO 方法并传入对自身的引用吗?
    【解决方案2】:

    Person 仍然可以拥有一个包含所有订单的 .Orders 集合。然后当你知道你需要它时,它就变成了一个延迟加载填充这个集合的问题。像 N/Hibernate 这样的东西在这里有很大帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 2011-07-27
      相关资源
      最近更新 更多