DDD仓储怎么设计

我发现现在的设计基本是一个DAO对应一个表,这种设计好像不是很好。如何改进?

2012年03月02日 10:05 "@hlayy"的内容
一个DAO对应一个表 ...

按照领域模型来设计,以模型来划分,一个聚合根实体为一个Repositoy,抛弃DAO和表的设计思路。

恩,我想的也是,谢谢老大指点。但是有个问题。假设我有个聚合根是Customer,他是跟creditCard关联的。那我有个仓库CustomerRepository,那我在CustomerRepository里面直接写方法addCreditCard?还是在CustomerRepository中委托creditCardDAO去保存?如果去委托的话,我不是还得写个creditCardDAO么。。?求指教。。

banq大哥曾说过:Repository替代Dao是OO深入的趋势,但在具体处理中,由于性能或设计不够周到或者一些事情把握不定,Dao还会存在一段时间,属于过渡式消失。Repository是相对对象而言的,而Dao是相对数据库而言的,只要我们还是使用关系数据库保存对象,也可能这两者都同时存在,因为侧重点不一样,但是可以肯定的是,业务层应该直接和Repository打交道,而不是Dao。

2012-03-02 18:26 "@hlayy"的内容
假设我有个聚合根是Customer,他是跟creditCard关联的。那我有个仓库CustomerRepository,那我在CustomerRepository里面直接写方法addCreditCard?还是在CustomerReposit ...

2012-03-02 18:26 "@hlayy"的内容
假设我有个聚合根是Customer,他是跟creditCard关联的。那我有个仓库CustomerRepository,那我在CustomerRepository里面直接写方法addCreditCard?还是在CustomerReposit ...

我也想问这个问题,请问你现在有答案了吗

2012-12-21 14:08 "@anyedage"的内容
聚合根是Customer,他是跟creditCard关联的。那我有个仓库CustomerRepository,那我在CustomerRepository里面直接写方法addCreditCard?还是在CustomerReposit ...

当然应该在Customer中有addCreditCard方法,一旦Customer从CustomerRepository出来后,就和Customer没有关系,CustomerRepository和Customer的关系就是仓库和库存品的关系。仓库只是保管库存品。

这里体现设计思路是划分好事物的边界。仓储和工厂是管理一个对象的生命周期,也就是对象边界之外的东东,属于对象边界内部的区域由对象本身负责。

以人为比喻,人是由母亲出生,然后生活家庭中,母亲和家庭这些都是人边界外的,而吃饭拉屎等动作是人边界内部的事情,应该由人负责。

学习了,正好也有这样的疑问