mvc 的 model 层为什么要分为service和dao?

dao sql model 代码 处理 mvc 分为 service 为什么 分离 编程技术
发布日期 2022-12-16 更新日期 2022-12-16 阅读次数 98 文章字数 671

mvc中的 v 为视图最易于理解,只把前端和后端分离。

c 为路由控制,权限控制等,以及根据参数灵活调用 model,但一般不处理数据。

那么 model 实际就是对事务逻辑的真正处理。

model 会有很多的处理代码,并且其中会和数据库操作【也就是必须执行一些sql】。

随着业务的越来越庞大,比如一个用户,有几十种操作,那么对用户表会有大量的sql操作,比如用户的余额会有很多的增删改查。

运营一段时间后,突然发现余额异常了。而业务如此庞大,代码 和 sql 又混杂在一块,显然难以找到问题所在。

又或者说,随着业务数据量庞大,原先可能使用 sqlite,或 mysql,现在要改成 Oracle,理想情况下是改sql就可以了,我不懂代码但是我觉得我改sql就可以了,但是现在代码和sql混杂在一块,这明显是不可能的。

甚至是,把编程语言改一改,我们认为只改代码就行了,sql不用动呀,但是这个想法也必然落空了。

我们发现,model是逻辑处理,处理必然有编程语言代码和sql,但从维护的角度来讲,代码、和sql实际应该分离。所以 model 笼统的分为了 service 和 dao 分别对应代码和sql。

service 是逻辑代码的处理也就是编程语言代码不要写sql,而 dao 则相反,只写sql【所以后来dao也叫数据处理层】。

基于以上认识,仍然是模糊的,那么 dao 到底该怎么处理?一般我们会认为就是写一个方法,把sql写在里面,而且一直以来也是这么做的。

后面又有了更实际的方案,比如 orm ,实体类和数据库字段对应。只是因为惯性思维会觉得dao是写函数,而实际dao仅仅是分离sql,至于怎么分离总之是尽可能的分离就是它原本的意义,所以 orm 和 dao 并不是对立关系,而是说 orm 是 dao 的一种实现形式。


文章作者: 朱丰华

文章链接: https://smart.52dixiaowo.com/blog/post-262.html

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。

dao sql model 代码 处理 mvc 分为 service 为什么 分离

发表评论

相关推荐
朱丰华   |   1年前   |   页面 · 监听

iframe子父页面信息传递与监听

375    评论    点赞
朱丰华   |   1年前   |   sql · mysql

mysql Timestamp或dateTime格式筛选

126    评论    点赞
朱丰华   |   1年前   |   请求 · 一个

ab测压命令,apache测压工具

172    评论    点赞
朱丰华   |   1年前   |   php · 缓存 · opcache

php 加速、提高并发opcache

198    评论    点赞
朱丰华   |   1年前   |   js · 重复

js如何避免重复监听addEventListener事件?

123    评论    点赞
朱丰华   |   1年前   |   参数 · 命令

golang获取命令行参数方法总结

88    评论    点赞
朱丰华   |   1年前   |   mysql · 变量 · sql

MySQL实现行号-自定义变量

113    评论    点赞
朱丰华   |   1年前   |   变量 · mysql · sql · 用户

MySQL用户自定义变量

94    评论    点赞
朱丰华   |   1年前   |   sql · php

PHP如何使用PDO批量执行SQL?

114    评论    点赞
朱丰华   |   1年前   |   sed · 文件

Shell 指定行处理head、tail、sed

155    评论    点赞
朱丰华   |   1年前   |   linux · 内容

linux环境下,对于一个大文件,如何查看其中某行的内容

68    评论    点赞
朱丰华   |   1年前   |   sql · mysql

mysql GROUP_CONCAT 顺序排序

84    评论    点赞
朱丰华   |   1年前   |   php

windows下编写、编译php扩展

157    评论    点赞
朱丰华   |   1年前   |   linux · php

linux下编写、编译php扩展

150    评论    点赞
朱丰华   |   1年前   |   php · 混淆 · obfuscate · git

yakpro-po混淆php代码

105    评论    点赞
朱丰华   |   1年前   |   c语言 · 编译

C语言中预编译#if的使用

75    评论    点赞
朱丰华   |   1年前   |   vue · model

vue语法v-model原理与实现

121    评论    点赞
朱丰华   |   1年前   |   javascript · js · obfuscator · 混淆

javascript-obfuscator混淆js文件

51    评论    点赞
朱丰华   |   1年前   |   js · vue · npm · 安装

npm快速上手

99    评论    点赞
朱丰华   |   1年前   |   js · 模块 · nodejs

nodejs引入自定义模块

47    评论    点赞
{{item.author_name}}   |   {{new Date(item.date*1000).log()}}   |   {{it}} ·

{{item.title}}

{{item.uv}}    评论    点赞