哎,今天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,
Http
ServletRequest 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层。