dao与service中代码的区别,请大家注意是代码的区别,因为我现在看到的代码是dao中代码和service中代码是几乎一样,我想问问dao与service中代码是不是一般直接将dao中代码复制到service就可以了。谢谢!
最主要的逻辑方面的都写在service里面。
如果你感觉两层代码写的都几乎一样的话,只能说明代码本身写的不规范。
比如你有发表文章的功能, 在daoImpl 里面就是 xxxdaoImpl.addArticle(文章){添加文章到数据库代码}
在serviceImpl里面就是 xxxserviceImpl.addArticle(文章){
验证用户登录, 验证用户是否有权限发表文章, 等等逻辑
然后再 掉xxxdaoImpl.addArticle(文章); 保存
保存完之后, 再其他逻辑, 比如,通知别人你发表了文章 等等.
}
要考虑到可维护性,可拓展性!
一般dao是数据库访问层,和数据库直接打交道的。
service中引用dao,处理具体业务逻辑。
service是你的业务需求的代码实现,再service层的代码执行完之后有时候需要持久化数据或修改所以就要调用dao接口持久数据
你在dao层写了一个
public User load(String username) {
// TODO Auto-generated method stub
Connection con =null;
PreparedStatement ps=null;
ResultSet rst=null;
User u=null;
try {
con=DbUtil.getCon();
String sql=”select * from t_user where username=?”;
ps=con.prepareStatement(sql);
ps.setString(1, username);
rst=ps.executeQuery();
while(rst.next()){
if(u==null) u=new User();
u.setName(rst.getString(“username”));
u.setPassword(rst.getString(“password”));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DbUtil.close(con);
DbUtil.close(ps);
DbUtil.close(rst);
}
return u;
}
到了service就变成了
public User load(String username){
return userDao.load(username);
service是你的业务需求的代码实现,再service层的代码执行完之后有时候需要持久化数据或修改所以就要调用dao接口持久数据
dao是Data access object,数据访问对象,主要是进行数据库访问的
service是服务的意思,主要是将数据提供给固定业务逻辑使用的代码
如何理解一段代码放在哪个位置,不是说固定不变的,只能适合这个环境的。
dao只管处理数据库的逻辑,比如addObject,把一个对象写入库。
而sevice层和业务相关,比如addUser,把一个用户数据写入库。传参类型也是不一样的。这里传入的是业务对象User。
1、dao就是操作数据库,比如插入、删除等,很单一的功能;
2、service是针对某个业务
举例:有两张表,班级和学生,其中班级表中有该班学生人数的字段;如果新加一个学生,肯定是插入学生表后再修改班级表中的该班学生人数。
把这两个dao都放在一个servcie中并加事务,如果插入学生表时正常,修改班级人数时报异常了,那么插入学生表的记录会被回滚,保证一致性。如果是两个service中分别插入和修改,那么插入成功后,就算修改报异常事务也提交了,导致数据库不一致。
小结:servcie对应一个操作,不一定是一个数据库操作。一般在servcie上加事务。
部分是正常的,不可能全部都这样。
如果service和dao一样说明业务很简单,只需要一个dao就能做到取,更新了
service里面写的是:把这条数据的状态改成‘1’