我在做DDD设计时遇到一个问题,请教板桥老师

一个问题需要请教板桥老师:
我在做DDD设计时遇到一个问题:
(在做一个model.service和repository的问题)

model 中业务类:
BillMgr(账单管理,从repository 获取账单,内部排序等 --内部方法比较多 )
AcctMgr(账户管理,从repository获取账户信息,等操作 --内部方法比较多 )
AcctBalanceMgr(账本管理,从repository获取账本,排序等操作--内部方法比较多 )
DiscntActionMgr(优惠活动管理,从repository获取已经参加的优惠,--内部方法比较多)
ParamMgr(通用参数管理,比较多的参数,--内部方法比较多)
...

现在有个model.TradeService 需要包含以上所有的类做一个业务
如:
TradeService.service1()
{
包含以上所有的类(BillMgr,AcctMgr,AcctBalanceMgr,DiscntActionMgr,ParamMgr...)
完成一个model.service
}

现在的问题是:
我是给TradeService 用一个 TradeRepository呢,还是给BillMgr,AcctMgr,AcctBalanceMgr,DiscntActionMgr
分别建立自己的Repository ?
例如:
TradeService(ITradeRepository rep); --BillMgr,AcctMgr等共用 ITradeRepository

还是
TradeService(IBillMgrRepository rep1,IAcctMgrReppsitory,rep2,...);--内部分别再传给BillMgr,AcctMgr 等

那种方法好些?

请指教,谢谢!

2011年02月28日 10:39 "ninyjun"的内容
我是给TradeService 用一个 TradeRepository呢,还是给BillMgr,AcctMgr,AcctBalanceMgr,DiscntActionMgr
分别建立自己的Repository ...

service一般在特殊情况下最好不用直接调用仓储,仓储是实体模型的仓储,仓储是和空间有关,时间无关的;服务是活动,和时间有关,与空间无关

感谢老师回复!我说的那个SERVICE不是SERVICE LAYER层面的,而是domain.model层的,我的问题是用多个好,还是用一个好?

如果用多个Repository,感觉每次构造TradeService的时候,比较麻烦,而且不好扩展;如果用一个感觉把BillMgr,AcctMgr,AcctBalanceMgr等就放到一个Repository中操作了,感觉不是很清爽!

TradeService 是domain.model层的service,不是service layer层的。

方式1(共用一个):注入ITradeRepository,传给BillMgr,AcctMgr等其他类
TradeService(ITradeRepository rep);
BillMgr(rep),AcctMgr(rep)等共用 ITradeRepository

方式2(用多个):注入IBillMgrRepository ,IAcctMgrReppsitory等
TradeService(IBillMgrRepository rep1,IAcctMgrReppsitory,rep2,...);
内部分别再传给BillMgr(rep1),AcctMgr(rep2) 等

那种方式比较好些,请大家帮忙给点意见, 谢谢!

domian的Service犹如场景,是各个实体共同参与Service,完成后各自离散。Service不可能拥有仓储,拥有仓储的往往是实体。
关于多仓储问题,这优于多DAO问题一样,觉得多,你可以自己实现泛实体仓储(本人也是这种方式,和以前泛DAO同理)。
不要因为方便而被方便牵着走,好的思维是带有严谨性的,破环了,到时发现问题,重构可是多倍的工作。