论坛首页 Java企业应用论坛

请教关于domain对象注入service

浏览 16404 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-01-09  
在一个domain对象中,
注入相关的service,不知道这样的设计是好还是坏。
因为这个service是这个domain对象的某个行为不可缺少的一部分.

举个例子,
在User这么一个domain对象中,
需要有一个支付这么一个行为,暂时称它为pay
在pay的时候,需要调用相关的service来完成支付的操作.


public class A{
  private PayService payService;
  
  public void pay(){
    payService.doPay(this);
 }
}



不知道这样的设计是否存在问题..
如果有问题的话,又应该如何设计呢.
本人小菜一个,望各位大大不吝赐教
   发表时间:2009-01-09  
乱套了~~

依赖关系最好是一个单向的~

一般来说应该service依赖于domain比较好

但如果domain反过来依赖service,就不是很好看了~而且代码很不容易理解~

0 请登录后投票
   发表时间:2009-01-09  
czx566 写道

乱套了~~ 依赖关系最好是一个单向的~ 一般来说应该service依赖于domain比较好 但如果domain反过来依赖service,就不是很好看了~而且代码很不容易理解~

首先谢谢您的回答


可是对于一个domian对象来说
比如例子里面的User
pay作为User的一个行为不是很正常吗.

嗯,就是写着写着,总觉得domain对象依赖service很奇怪。
所以想请教看看,
这样的方式是否是种不好的设计,
以及这种设计会有什么利弊
0 请登录后投票
   发表时间:2009-01-09  
我认为这要看你的domain是不是一个层次的,如果上下两个层次的domain通过service调用就没问题,同一层次的肯定不行.像lz例子里的user和pay就不是两个层次的,pay更底层,就可以.
0 请登录后投票
   发表时间:2009-01-09  
kakac001 写道
czx566 写道

乱套了~~ 依赖关系最好是一个单向的~ 一般来说应该service依赖于domain比较好 但如果domain反过来依赖service,就不是很好看了~而且代码很不容易理解~

首先谢谢您的回答


可是对于一个domian对象来说
比如例子里面的User
pay作为User的一个行为不是很正常吗.

嗯,就是写着写着,总觉得domain对象依赖service很奇怪。
所以想请教看看,
这样的方式是否是种不好的设计,
以及这种设计会有什么利弊



在我看来,就是设计时,对于方法的粒度没有把握好

user 对象的确可以有扣款 ,加余额的 方法,但这些不应该关注事务和业务~

不过设计到支付(包含事务的业务方法)这样的大粒度方法,我认为应该放到service层中才是合理的。
0 请登录后投票
   发表时间:2009-01-09  
Nightlee 写道
我认为这要看你的domain是不是一个层次的,如果上下两个层次的domain通过service调用就没问题,同一层次的肯定不行.像lz例子里的user和pay就不是两个层次的,pay更底层,就可以.

不知道是我不是我理解错了..
不是很明白你的意思..
在这边pay不是一个domain
而是User的一个行为.
0 请登录后投票
   发表时间:2009-01-09  
to czx566
嗯.感谢您的回复,

原本项目里面的逻辑就是pay是作为User的一个行为来做的.
现在在重构的时候发现需要改变相应的pay方法,
就很自然的用到了现在的service的方式..

大概知道要怎么去改了..不过可能没那么好改,呵

对了..不知道这种service的注入会有什么不好的地方..
您有何高见呢?
0 请登录后投票
   发表时间:2009-01-09  
已经回答了:
   
    依赖顺序最好是从下到上,好像有一条法则~~~

    目的:比较能让人理解


代码我一直认为:第一是能让机器明白,但同时也能让他人明白~

0 请登录后投票
   发表时间:2009-01-09  
而且这样也好像容易让陷入内存泄露的风险~
0 请登录后投票
   发表时间:2009-01-09  
嗯.了解了. thx

题外话..这些“法则”有哪里有专门的介绍吗?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics