分层的目的是为了使工程的结构更加清晰,将逻辑拆分开,不同的层做不同的事情,实现一定程度上的解耦和复用,
比如你有一个需要导出统计结果的需求,让你用两个接口分别导出csv格式的和excel格式的,
如果不拆分controller和service,那么你需要写两次查询组装数据的逻辑,
如果拆分了,service层做查询组装数据的逻辑, controller层做包装为csv或excel,那么你的service层查询组装数据的逻辑就可以复用了,
如果有一天,需求变更,导出的数据要求新增一个字段,那么直接在service层改了即可,如果不拆分,就需要两个地方都改,
所以拆分可以便于维护,
业务层不能忽略,从分层和隔离的角度,表现层不可以直接操作数据访问层
哦,我的问题没描述完整,我是从表现层到控制层(使用@Controller 注解的类),再DAO层,这样把业务层忽略了可以吗?正规的开发是不是这样的呢?
@钓鱼翁: 其实不可以这样在Controller直接调用DAO,而应该通过接口调用ServiceImpl,NLayer或者3Layer已经是业界共识了
controller层是做跳转控制、数据包装等操作的,不涉及到业务转换和处理,没法省掉。强行省掉,会把业务代码升到controller层或者降到dao层,这样都是不利于解耦和复用的