Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 在何处公开域模型中特定SQL查询的结果_Oop_Domain Driven Design_Entity Relationship - Fatal编程技术网

Oop 在何处公开域模型中特定SQL查询的结果

Oop 在何处公开域模型中特定SQL查询的结果,oop,domain-driven-design,entity-relationship,Oop,Domain Driven Design,Entity Relationship,以下哪个示例是为特定人员公开包含特定产品的订单集合的最佳方式?为什么?或者有更好的方法一起做?(对不起,我对领域建模不熟悉)。订单列表通过SQL查询从数据库中提取,并转换为列表集合 一个人有一对多订单,一个订单有一对多产品 1) class Person { List OrdersContaining(Product p) {.....} } 我不会直接在封装数据的域对象本身上公开这种方法。相反,我将使用应用于订单域的DAO模式。本质上,这是你的#2: 类OrderDAO{

以下哪个示例是为特定人员公开包含特定产品的订单集合的最佳方式?为什么?或者有更好的方法一起做?(对不起,我对领域建模不熟悉)。订单列表通过SQL查询从数据库中提取,并转换为列表集合

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

1)

class Person
{
    List OrdersContaining(Product p)
    {.....}
}

我不会直接在封装数据的域对象本身上公开这种方法。相反,我将使用应用于订单域的DAO模式。本质上,这是你的#2:

类OrderDAO{ 列表按人物和产品列出(人物、产品){ ..... } }
这样,随着时间的推移,您需要添加的各种访问模式与Order domain对象分离。

Person仍然可以拥有一个.Orders集合,其中包含其所有订单。然后,当您知道您将需要它时,它就变成了一个延迟加载来填充此集合的问题。像N/Hibernate这样的东西在这里非常有用。

谢谢,这非常有用。我可以问一下,在关系更简单的情况下,例如个人和所有相关订单,您会怎么做。您会将其建模为Orders DAO上的另一种方法,还是将其建模为Person.Orders集合?Orders可以调用OrdersDAO方法传递对自身的引用吗? 2)

class Order
{
    List ForPersonContainingProduct(Person person, Product product)
    {.....}
}
2)

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