代码结构中Dao,Service,Controller,Util,Model是什么意思

1.Model
Model是模型,一般而言,会有人分的更细,VO,DTO等等。我并不推荐分的更细,这个Model常常和持久化的数据一一对应,如Mysql和MongoDB。
Model承载的作用就是数据的抽象,描述了一个数据的定义,Model的实例就是一组组的数据。整个系统都可以看成是数据的 流动,既然要流动,就一定是有流动的载体。

这个红圈标的就是Model。它就应该是一个纯数据的集合,就是被各种东西传来传去,被各种加工处理的数据团。
通常会有很多Model,一条业务流就是对应一条或者多条数据流,拿知乎为例子。
文章是一个Model,一般叫Article,包括Title,Summary,Author,Content等等。
评论也是一个Model,一般叫Comment,包括Content,userID等等。
对于初学者而言,第一个要学会,就是建模,把业务逻辑映射成数据模型。
2.Util
Util是工具的意思,一般来说,常常用来描述和业务逻辑没有关系的数据处理。
Util一般要和私有方法对比:私有方法一般来说是只是在特地场景下使用的,私有方法越多,代码结构越乱。常见的重构策略就是首先从一个很多行数的代码里抽象出若干个私有方法,然后再抽出公用的Util。
如果有可能,尽可能的少用私有方法,而是把他换成一个公用的Util,代表他和业务逻辑是不相关的。通常命名也是ArticleUtil,CommentUtil之类的
这里写图片描述
像这种打包,不管是充气娃娃还是别的什么东西,都打包。你可以理解为图中的黑衣人就是一个Util。
某中程度上也会跟Service有点接近。但是Service一般而言,都是包含有业务逻辑的,很少能做单元测试。
Util一般来说,就是一个明确的输入和一个明确的输出结果。单元测试中,多数也是来测试Util。
积累好自己的Util是一件很重要的事儿。
3 Service
Service比Util的概念大很多,它的重点是在于提供一个服务。这个服务可能包括一系列的数据处理,也有可能会调用多个Util,或者是调用别的服务。总归一句话,就是,有什么事情,你来找我。
这里写图片描述
就像这个图上的妹妹一样,她就是一个Service,她能提供什么样的服务?这个是必须定义好的。如果是洗脚,她要帮你脱鞋,要端盆子烫你的脚。这里面,你的脚就是一个Model,盆子里的水相当于Util,不管里面放进去啥都能烫一烫。
4.Dao
Dao一般而言,都是用来和底层数据库通信,负责对数据库的增删改查。
这里写图片描述
是的。他就是一个Dao。他从来不关心这些货物要去哪里,他只关心。入库,出库,查询和更换。
所谓的CRUD就是创建,读取,更新,删除。
Dao最好都是要独立出来。
到现在为止,最佳实践就是一个Service只对应一个Dao。Service会做一些额外的检查,如货物是否损坏,入库单是否完整,等等等等。
我并不推荐在Service里调用多个Dao,也不推荐在Service里调用多个Service,大多数情况下我都不推荐这么干。
具体原因以后再说,这也是一个开放性的话题。
现在我们分清楚了Model,Util,Service和Dao,可是谁来做总的调度呢?
5.Controller
这里写图片描述
控制中心,所有的指令,调度都从这里发出去。
哪一个Service做什么事儿,谁的数据提供给谁,一般而言,都是在Controller里实现的。
Controller也是最常见的容易产生脏代码地方,通常他们会把一些不该放到Controller里东西也放进来。
大概的感觉就是这样的。
这里写图片描述

作者:暗灭
链接:https://www.zhihu.com/question/58410621/answer/156868800
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

猜你喜欢

转载自blog.csdn.net/wang_ze_ma/article/details/78555511