代码设计:直接从controller调用dao是否可行?
问题:web开发中通常分为controller、service、dao三层,如果针对简单的数据操作,我们直接从controller调用dao是否可行?
以下观点来自网上:
1.不赞成直接调用dao的观点
(1)service a不能调用b的dao层,只能调用b的service层实现业务。因为b的service是对dao的CRUD封装,如果是单库的话service或许只是dao的代理,但如果有cache,跨库查询那显然调用dao b是不合理的,可以类比为视频系统调用用户系统,视频系统不关心用户系统的dao层实现机制,只要通过service层查询到用户信息即可。另外业务依赖确实有这样的困惑,但本身java类之间通讯就是有依赖关系的,或许如果service a业务依赖的service b业务太过于复杂时你可以再次抽象出service b的另外一个interface就ok了。
(2)service层,这更符合MVC的理念,也符合我们编程的习惯,还有为了数据的安全性,也不允许controller对数据库做直接操作
(3)个人觉得肯定是service层了, 如果直接调用dao。违背了MVC模式概念, 而且代码才真正的耦合性增加。换个思想来看,如果你直接调用了dao层. 那么平常的一些业务逻辑处理怎么办? 写在dao里面吗, 万一哪天业务需求改变了. 岂不是连dao全部都要改版.增加了开发的工作量,而且代码重用性不高.
(4)调用service层,要严格执行mvc的分层结构,如果不分层直接调用dao层的话,容易出错,后期维护困难.只要严格分层,不会容易出错
2.赞成调用的观点
(1)service层作为一个业务逻辑处理层,我若直接调用dao层,那么该业务只取出我所需要的数据,我若调用service层,那么就相当于一个业务依赖于另一个业务,耦合度就高了
(2)代码简洁性