像这种打包,不管是充气娃娃还是别的什么东西,都打包。你可以理解为图中的黑衣人就是一个Util。
某种程度上也会跟Service有点接近。但是Service一般而言,都是包含有业务逻辑的,很少能做单元测试。
Util一般来说,就是一个明确的输入和一个明确的输出结果。单元测试中,多数也是来测试Util。
积累好自己的Util是一件很重要的事儿。
3 Service
Service比Util的概念大很多,它的重点是在于提供一个服务。这个服务可能包括一系列的数据处理,也有可能会调用多个Util,或者是调用别的服务。总归一句话,就是,有什么事情,你来找我。
就像这个图上的妹妹一样,她就是一个Service,她能提供什么样的服务?这个是必须定义好的。如果是洗脚,她要帮你脱鞋,要端盆子烫你的脚。这里面,你的脚就是一个Model,盆子里的水相当于Util,不管里面放进去啥都能烫一烫。
帮你脱鞋可以是一个Service,也可以是一个私有函数,也可以是一个Util。看你的是让这个小妹妹帮你脱,还是别的小妹妹脱,还是自动脱鞋机。
如果是你自动脱。。。说明你在Model里面加上了功能,你的脚就不是一个纯粹的数据模型了,而是一个包含业务功能在里面的充血模型。
这样不好。老老实实让小妹妹帮你脱鞋不好么。
4.Dao
Dao一般而言,都是用来和底层数据库通信,负责对数据库的增删改查。
是的。他就是一个Dao。他从来不关心这些货物要去哪里,他只关心。入库,出库,查询和更换。
所谓的CRUD就是创建,读取,更新,删除。
Dao最好都是要独立出来。
到现在为止,最佳实践就是一个Service只对应一个Dao。Service会做一些额外的检查,如货物是否损坏,入库单是否完整,等等等等。
我并不推荐在Service里调用多个Dao,也推荐在Service里调用多个Service,大多数情况下我都不推荐这么干。
具体原因以后再说,这也是一个开放性的话题 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 。
现在我们分清楚了Model,Util,Service和Dao,可是谁来做总的调度呢?
5.Controller
控制中心,所有的指令,调度都从这里发出去。
哪一个Service做什么事儿,谁的数据提供给谁,一般而言,都是在Controller里实现的。
Controller也是最常见的容易产生脏代码地方,通常他们会把一些不该放到Controller里东西也放进来。
大概的感觉就 Java开源项目【ali1024.coding.net/public/P7/Java/git】 是这样的。
干嘛的都有。想想如果打小针,抽血,查尿也混杂到门诊大厅的感觉?
可是大部分人写代码就是这样的。
四、是否适用于WEB,Android和IOS?
Java后台是有很清楚的结构的,毕竟在JSP里写Sql语句的蛮荒时代已经过去了。
Android本身就是一个良好的框架体系,基本上问题也不大,最多就是MVP和MVC的差别之类。
IOS虽然没有官方提供这种框架体系,特别是很多人喜欢直接在Dict里用key取数据,这本身就破坏了代码的层次性。
但是毕竟是有李明杰提供的Json解析Util,只是各家要求的力度而已。
最难以理解的是WEB,也就是JS。
我不是在黑JS,我是在黑JS程序员。分层结构一直都不是JS社区里最注重的,在JQuery时代更是如此,不管是Html还是JS还是CSS混在一起是正常的。
那个时候叫插件,现在改名了,叫组件。
你很难在JQuery里找到一套清晰的分层结构,就跟十几年前所有的人都在Jsp里写逻辑语句的道理差不多。
直到google的大神偶尔溜达过来一看,咦?你们怎么还在刀耕火种?我来给你们加点现代感的东西吧。
于是Angular横空出世,一次性地构建了一个清晰的框架结构。每次看到Angular的时候都忍不住 惊叹,原来前端代码也可以这样!
而原来的感觉就是这样。。。
现在基本上可以分成两大阵营,一个是React和Vue,一个是Angular。
最后
现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**
,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**
[外链图片转存中…(img-xCU04YlZ-1650019792309)]