锁定老帖子 主题:请教关于domain对象注入service
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-10
最后修改:2009-01-10
主要是为了分层,便于理解后后期的维护吧
|
|
返回顶楼 | |
发表时间:2009-01-10
最后修改:2009-01-10
kakac001 写道 在一个domain对象中,
注入相关的service,不知道这样的设计是好还是坏。 因为这个service是这个domain对象的某个行为不可缺少的一部分. 举个例子, 在User这么一个domain对象中, 需要有一个支付这么一个行为,暂时称它为pay 在pay的时候,需要调用相关的service来完成支付的操作. public class A{ private PayService payService; public void pay(){ payService.doPay(this); } } 不知道这样的设计是否存在问题.. 如果有问题的话,又应该如何设计呢. 本人小菜一个,望各位大大不吝赐教 属于User的行为肯定要定义在User中,但是为什么一定要使用service来实现它的行为呢?Service不是为domain object服务的,domain layer的service是为Application layer服务的。这个service中的doPay除了会被User调用之外难道还会被其他对象调用吗?为什么要定义成为service呢?能说一下你这个Service中的doPay()都做了些什么吗?我认为没有必要定义成为service |
|
返回顶楼 | |
发表时间:2009-01-10
kakac001 写道 呵 把pay封装到PayService中,pay是作为User的一个行为,至于自己的实现是怎样, 跟User应该没多大关系吧? 主要是因为pay的实现复杂了些些 所以才把它放到一个相应的service中来处理.呵 如果只是实现复杂了些,并不是把它作为一个service的理由,service是提供给Application层或者其他层次使用的;你可以使用一个接口来定义pay这个操作,如PayProcessorInterface,然后注入到User中,这样就可以了,也不需要与service耦合。作为一个domain object,本身应该不会调用到service的东西的 |
|
返回顶楼 | |
发表时间:2009-01-10
呵.
本想说对这个问题已经心里有点数了. 没想到居然上了javaeye首页. 谢谢各位的解答. 之前可能没有描述好,再做点补充吧. 为什么要写一个payService: 因为这个PayService还依赖着其他的service. 而这些service与user并没有什么太多的联系, 如果将这些service也一起注入给user.那这个user会让人很头疼. 而且这个PayService里也有一些逻辑,以及事务. 呵,所以有了这个PayService来做个中间层. to pipilu: 诚然,这个user似乎是承载了太多的功能. 并没有将User细分到这个程度, 算是一个“混血儿”吧 呵 |
|
返回顶楼 | |
发表时间:2009-01-12
你完全可以做一个user对象,再做一个userService的对象。这样依赖就没问题了吧!
|
|
返回顶楼 | |
发表时间:2009-01-12
兄弟~~你要明白为什么要注入
你注入弄反啦~~完全没有di在里面啊 |
|
返回顶楼 | |
发表时间:2009-01-12
请问DOMAIN 对象 是什么? 我是小菜,能解释一下吗? 让我也学习一下
|
|
返回顶楼 | |
发表时间:2009-01-12
最后修改:2009-01-12
czx566 写道 依赖顺序最好是从下到上,好像有一条法则~~~ 依赖倒置原则 一种设计原则。 减少偶合(最好没有)。 还有很多设计原则 单一职责 保证自己的变化尽量少的传播 |
|
返回顶楼 | |
发表时间:2009-01-12
是可以调用的,且不讨论你举的例子这么调用是不是合适的。在DDD中,Entity和Service实际上是同一层,因此之间有双向依赖没有什么不可的。事务控制并不是在service中控制的,而是单独在Application Service层控制的。
这样做的难点在于hibernate之类的框架不能够注射Service。 |
|
返回顶楼 | |
发表时间:2009-01-12
建议楼主这样抽象,把pay也划一个域出去,同时也不要在user里出现pay动作。而是把pay动作放到外面的领域服务层去。
具体划分就是这样: Payment ----依赖--->User(领域对象包内依赖,这个是内聚) 下面是从领域服务层到领域对象的依赖: UserService--依赖--->User PaymentService--依赖---> Payment 另外还可以出现类似这样的服务,同时依赖下层的两个领域对象:UserPaymentService --->User, Payment 这样一样层次就清楚了,行为不也内聚了吗? 欢迎拍砖 |
|
返回顶楼 | |