Code Bye

为什么Service 和dao 设计的好处


             在公司实习了一段时间了,对于这样的service和dao的设计理解的不是很充分,希望有人能够解释一下:
为什么在dao的设计上会有一个BaseDao<T>的接口,里面定义了实体的一些基本的操作,然后会有一个BaseDaoHibernate<T>的实现类来实现BaseDao<T>接口并且扩展了HibernateDaoSupport ,最后其它的一些实体比如UserDao   等等都会像上图那样设计
            我目前是这样理解的,就是说有了一个BaseDao接口中定义了基本Entity通有的操作,然后BaseDaoHibernate 类实现了这些基本的操作,所以我们的其它实体UserDaoImpl 等等只要继承BaseDaoHiber类就不用把那些基本的操作再去实现一遍,这样简化了一些操作,然后就是在UserDao中我们可以增加某个实体特有的方法,让后再UserDaoImpl中去实现
           至于Service也预留了接口,我理解的作用就是跟基本的面向接口编程差不多。
           到底这样还有什么好处呢,希望有经验丰富的人能够讲解的详细一些,先谢谢各位了。


15分
BaseDAO一般是提供从数据库 增加、删除、修改记录、查询所有记录、查询符合某个条件记录、取得某条记录等方法的底层数据操作自定义类。
由于我们可能操作多个数据库表,这样就需要为每个表提供一个操作他的类 xxDAO, 这些DAO继承BaseDAO 就可以省略很多重复代码(从数据库 增加、删除、修改记录、查询所有记录、查询符合某个条件记录、取得某条记录等方法的代码)…

然后因为DAO 与 Service分开 是因为, DAO是直接针对数据库进行操作的, 而Service是进行业务操作的,处理业务逻辑之用。
如:添加一个用户, DAO只需要用来向数据库插入用户记录,而Service考虑的是:插入用户,可能同时还需要添加 角色,可能还需要做其他业务操作等等…     

其实现在市面上流行的 MVC模式 ,你可以去好好理解一下。   这样开发的好处就是层次清晰,使项目的扩展性更好…

首先谢谢你的回复,就是说Service 里面除了调用dao来完成数据的持久化之外,可能还会有其他的操作,我举个例子不知道说的对不对,就比如说我先在有个 ajax请求需要得到用户列表(要得到json数据) 那么我的dao调用方法得到的是一个list集合,而service中出了调用dao这一层得到list集合后,还应该做相应的数据处理(转化成json数据),同理其它的一些的业务逻辑的操作,或者针对 dto 或者事务的处理都应该放在service 这一层吗??  我目前对业务逻辑的认识比较模糊
有那么一丝道理…但是一般查询没有什么大的业务逻辑,可以直接用action 或者 controller来处理。  一般复杂的都在添删改里面… 总之 各有各用~ 
引用 2 楼 u010785969 的回复:

首先谢谢你的回复,就是说Service 里面除了调用dao来完成数据的持久化之外,可能还会有其他的操作,我举个例子不知道说的对不对,就比如说我先在有个 ajax请求需要得到用户列表(要得到json数据) 那么我的dao调用方法得到的是一个list集合,而service中出了调用dao这一层得到list集合后,还应该做相应的数据处理(转化成json数据),同理其它的一些的业务逻辑的操作,或者针对 dto 或者事务的处理都应该放在service 这一层吗??  我目前对业务逻辑的认识比较模糊

事物处理的确都应放到service里面。  业务逻辑很模糊很正常,等你工作时间长了,接触到的东西多了就会明白。  

很明显的三层阿,显示层,业务层,数据访问层,

10分
service,例如银行一个转账的模式,你这边转出需要减金额,那边进账需要加金额,但是这个业务操作必须为一个操作体,所以一般就要在业务层声明一个事务去提交,.而dao层只会给你提供与数据库交互的功能
恩恩,你举这个例子我真的有点感觉了,还是掌握的东西太少了
说白了 dao层什么都不用关心  他只负责select  update  delete  insert
具体什么时候做这些操作  怎么做这些操作 都由Service来处理。
打个比方,dao就是士兵,Service就是将军。一切听指挥,只做你该做的。
这三层主要是便于管理代码吧  时间长了就明白了
dao层只做数据库交换的工作。
service层做业务相关处理。
分开就是为了让代码更清晰。
逻辑出问题就在service找问题,数据库,sql有问题就在dao层找问题
不要钻进牛角,这只是一种分层结构,类似公安局,司法院,民政府,每个部门负责一个模块,也可以放一起,但是很乱;而mvc模式,dao层只用来处理与数据库的交互,service我只处理分发请求,求你给我什么请求,我去找对应处理你这个请求的方法,大家各负责一个模块;

15分
1你的问题可以拆分三个问题
一.继承问题。例如UserDaoImpl 等等只要继承BaseDaoHiber
  这个楼上已经说了很多了。节省代码。(我就不详细说了)
2.面向接口编程
解耦合,方便维护,扩展.一种规范约束方便团队开发
范例:JAVA的JDBC,sun公司只写一个规范出来。你们数据库厂商自已去实现驱动。(规范约束)
3.mvc分层模式
区分层次的目的即为了“高内聚,低耦合”的思想。
有利于标准化,分层开发是为了把代码区分开来。放在一起多乱啊。也有一部分是为省代码的原因
补充一个例子:例如业务是转帐100块。手续费2块。这是业务问题。在SERVICE层写。从A去掉100块。B增加100百。去掉A的2元手续费。这是一个原子性的所以事务必须放在SERVICE.
楼主问题解决.
可以百度三层架构,面向接口编程,继承。问题解决
恩恩,很详细,感觉有点方向了,谢谢各位的指导,以后有问题大家麻烦解答下

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么Service 和dao 设计的好处