说说为什么编程加service层_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 说说为什么编程加service层

说说为什么编程加service层

 2013/7/10 12:35:43  am_danger  程序员俱乐部  我要评论(0)
  • 摘要:哎,今天codeview的时候挨批了,原因很简单,就是本人的编码风格不符合他们公司的结构分层(本人刚来这个公司一个月),下面具体说一下具体原因。公司的编码风格是分为四层的po、dao、service、control。po是数据库中表对应的实体类,这个毫无疑义,dao是对po的数据库操作接口(即数据库的增删改查)这个也没有异议,问题出在了service和control层。我发现公司写的service层都是伪service,其中写的接口是赤裸裸的对dao层的照搬
  • 标签:Service 什么 为什么 编程

     哎,今天code view的时候挨批了,原因很简单,就是本人的编码风格不符合他们公司的结构分层(本人刚来这个公司一个月),下面具体说一下具体原因。
公司的编码风格是分为四层的po、dao、service、control。po是数据库中表对应的实体类,这个毫无疑义,dao是对po的数据库操作接口(即数据库的增删改查)这个也没     有异议,问题出在了service和control层。我发现公司写的service层都是伪service,其中写的接口是赤裸裸的对dao层的照搬,而control层里面竟然出现了很多业务逻辑代码,如下(我就直接贴出service接口的实现代码了)
@Service("areaService")
public  class AreaServiceImpl implements IAreaService{

@Autowired
@Qualifier("areaDao")
  private IAreaDao areaDao;
   public  List<Area> getByTeaClass(Long teaId,Long classId){
        return areaDao.findByTeaClass(teaId,Long classId);
}
public void save(Area area){
         areaDao.save(area);
}
}
@Controller("areaAction")
public class AreaAction extends BaseAction {
@Autowired
@Qualifier("areaService")
private IAreaService areaService;
public ActionForward doAdd(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
           String areaName=request.getParameter("areaName");
           Area area = new Area();
           area.setAreaName(areaName);
          areaService.save(area);
          return mapping.findForward("success");
}
}
当然我只是为了演示一下代码,以上写的比较简单,其中的异常处理以及日志都没写,以上就是公司的代码写法。我认为以上代码的service层完全没有充当真正service层的责任,只是照搬了dao层的方法,然后再action中调用,反而在control中进行了各种逻辑的处理(当然在mvc三层架构里,这样写是毫无疑义的,但是现在加入了service层)。
而我的service层是处理业务逻辑的,并且包括各种逻辑的处理,并且承担action中控制流程的部分,让action只关心要转到的位置,下面贴出我的代码
@Service("areaService")
public  class AreaServiceImpl implements IAreaService{

@Autowired
@Qualifier("areaDao")
private IAreaDao areaDao;
public HttpServletRequest save(HttpServletRequest request){ 
           String areaName=request.getParameter("areaName");
          Area area = new Area();
          area.setAreaName(areaName);
          areaDao.save(area);
}
}
@Controller("areaAction")
public class AreaAction extends BaseAction {
@Autowired
@Qualifier("areaService")
private IAreaService areaService;
public ActionForward doAdd(ActionMapping mapping, ActionForm form,
           HttpServletRequest request, HttpServletResponse response) { 
            areaService.save(request);
           return mapping.findForward("success");
    }
}
以上是我的写法,下面说一说我这样写的想法:
            首先来说在MVC框架中controller承担了两种责任,一个是逻辑流程的控制,还有一个是页面的跳转,如果按照上面公司的写法的话,势必controller中的代码量会很大,再加上V层,这就导致了MVC框架的两头大,中间细的结果,而上面公司的写法加上service一点用处都没有,完全可以不用写service层。而第二种写法呢,service将所有的业务逻辑的活全都揽了下来,包括从请求中获取数据,然后将数据封装成实体类,然后将实体类持久化,所有的业务逻辑都在service层里面去实现,让controller只关心跳转,这也避免了两头大中间细的局面。其实第二种写法是为controller分压,将原来controller中业务流转部分都拿到service层去实现。
我认为这样加service层才有必要,否则根本没必要加service层,只需mvc三层就可以了。
          我理解的service有两种功能,一个是完全处理业务逻辑,还有一个是向外提供接口,如果按照第一种写法的话,我感觉真没必要加service层。





发表评论
用户名: 匿名