一般是 一个service 对一个dao
service 中要调用别的dao是也是通过service 调service 这种public class xxxImplService implements xxxService { @Autowired(required = false)
private xxxDao xxxDao;
@Autowired(required = false)
private xxxService xxxService;
@Autowired(required = false)
private xxxService xxxService;}
有没有这种情况
一个service 对应多dao
这种public class xxxImplService implements xxxService { @Autowired(required = false)
private xxxDao xxxDao;
@Autowired(required = false)
private xxxDao xxxDao;
@Autowired(required = false)
private xxxDao xxxDao;}
service 中要调用别的dao是也是通过service 调service 这种public class xxxImplService implements xxxService { @Autowired(required = false)
private xxxDao xxxDao;
@Autowired(required = false)
private xxxService xxxService;
@Autowired(required = false)
private xxxService xxxService;}
有没有这种情况
一个service 对应多dao
这种public class xxxImplService implements xxxService { @Autowired(required = false)
private xxxDao xxxDao;
@Autowired(required = false)
private xxxDao xxxDao;
@Autowired(required = false)
private xxxDao xxxDao;}
有
所以你的一个Service对应一个dao的作法不好。
那你到是说说你是什么意思?你是说一个Service里面:有某个Dao类的多个实例??这个意思么?如果是这个意思,那我说你吃多了没事做。
dao只是操作数据库
public class TestImpDao extends AbstractManager implements TestDao{
public void insertTest (Test test) {
this.save(test);
}
}public class Test2ImpDao extends AbstractManager implements Test2Dao{
public void insertTest2 (Test2 test2) {
this.save(test2);
}
}public class Test2ImpService implements Test2Service { @Autowired(required = false)
private TestDao testDao;
public void insertTest2 (Test2 test2) {
if(test2 != null){
if("xxx".equals(test2.getxx())) {
test2.setxxx(xxx);
}
testDao.insertTest(test2);
}
}
}
public class TestImpService implements TestService { @Autowired(required = false)
private TestDao testDao;
@Autowired(required = false)
private Test2Dao test2Dao;
public void insertTest (Test test) {
testDao.insertTest(test);
test2Dao.insertTest2(test); //那我这时直接调用时不是绕过了Test2Service 业务逻辑吗
}
}
if(test2 != null){
if("xxx".equals(test2.getxx())) {
test2.setxxx(xxx);
}
testDao.insertTest(test2);
}
}
//有可能做的更多的业务逻辑 以后可能也会变更
testDao.insertTest(test);
test2Dao.insertTest2(test); //那我这时直接调用时不是绕过了Test2Service 业务逻辑吗
}
向testDao和test2Dao各插入一条数据,这不就是你的业务逻辑??如果你要往test2Dao插数据。还需要先 得到一个test2Service,再调用test2Service的插入数据的方法,那你觉得你的dao和service有什么区别?
为什么你插入test2的业务逻辑一定要放在test2Service里面列? 你为什么不以在test1Service的方法里面列??
可是比如:过一段时间客户提出可以看test2新增的历史记录了?可能以后还有别的变更了?
比如我action 调用 test2Service.insertTest(test2); 时这样不是什么都不需要变吗
这样保证每都是分开的。
我们举个例子吧。转帐操作。。 1。在action我们获取了帐号 a1,a2,以及转帐的金额 m传到service
2。在service里面有一个方法:tansfer来完成转帐
[code=Java][
public void transfer(Account a1,Account a2,double m){
// 1.判断a1的余额够不够, 这里是不是需要调用userDao去查询余额?
//2。如果够的话,a1.balance - m a2.balance+m。也是用userDao
//3。往转帐记录表里面插入一条转帐记录 ,是不是要用到transferRecordDao?
}
/code]
那你说这个service是不是用到了2个dao? 每个Service 都有自己的任务,为什么要去调用别人列?
你这样Service又调用Service,还调用Dao,那你不觉得自己分层很乱?根本没有层次可言?
你再不明白。。那我也说不了什么。。只能说我教不会你。。 你另寻高明吧
一般一个service是可以操作多个dao的。一个service内一般一个方法对应一个完整的业务事务,而一个事务会可能操作多表(也就是操作多个dao)service之间一般不互相调用,而由上层进行调用(Action层或Manage层)
那要是我 金额支付和金额增加都需要发送短信通知也在这写是吧
那我要是有N个这样的地方那我维护不是得改N个方 代码也没有重复利用假设userDao是调用update
那要是用userService update的话是不是只需在userService update里增加发短信功能了?
action --->service --->dao --->数据库
| /|\
|__ |
没有一团糟吧?就应为service 是业务逻辑 而service 方法中 调另一个service方法
就因这样业务逻辑就是一团糟?
何不明白 一个service 方法中 调另一个service方法 这个方法难道就不是一个完整的业务逻辑吗