代码设计:直接从controller调用dao是否可行?

Jalen备忘录 2017-10-18 02:32:27
问题: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)代码简洁性
...全文
5254 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuhongw 2018-01-26
  • 打赏
  • 举报
回复 1
完全可以,不是必须都通过两层来调用。
hookee 2017-10-19
  • 打赏
  • 举报
回复
街头小贩 2017-10-19
  • 打赏
  • 举报
回复 1
如果没有业务逻辑可以直接调用的,具体问题具体分析,不能一刀切

10,611

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧