项目中Dao,Service,Controller,Util,Model是什么意思,为什么划分

总结

本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!

MySQL50道高频面试题整理:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

3.每一个分类代表什么含义

4.是否适用于WEB,Android和IOS?

5.进一步的学习的话,是要学习系统架构么?

一 为什么需要一个好的代码结构

  1. 好的代码结构并不仅仅是为了看上去清晰,它更像是我们对一个系统的拆解和组装。

  2. 好的代码结构可以让你在遇到代码交接这种天理不容的情况时,减少提刀砍人的可能性。

  3. 好的代码结构可以让多人协作开发更容易,而不会缠缠绵绵到天涯,再相爱相杀。

我们经常形容一个坏的代码结构,像屎一样。

我们称它为一坨,说真的,接手过烂代码之后,真的找不到比屎更能描述自己感受的词了。

“屎”代表着混乱,一坨,各种杂质。接手一堆烂代码的难度就像是用一坨屎来做沙画。

有时候我们还会用一团毛线来形容代码,大概是这样的。

对的,这种感受是绝对不会错的。而我们要做的就是把这团毛线,变成像瑞士军刀一样的清晰。

你们觉得哪个更有成就感?

二 什么样才是一个好的结构

  1. 好的结构应该保持单一职责。

  2. 好的结构应该是通用的。

  3. 好的结构应该是有明确定义的。

这其实就是所谓的脚手架提供的最大的价值,一般而言,Java,Android,IOS都有一套明确的框架体系,JS本来没有,后来有了,然后。。他们就打起来了。

就像。。。他们一样。

该喷火的喷火,该喷水的喷水,每个人分工都很明确。

三 每一个分类代表什么含义

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,不管里面放进去啥都能烫一烫。

帮你脱鞋可以是一个Service,也可以是一个私有函数,也可以是一个Util。看你的是让这个小妹妹帮你脱,还是别的小妹妹脱,还是自动脱鞋机。

如果是你自动脱。。。说明你在Model里面加上了功能,你的脚就不是一个纯粹的数据模型了,而是一个包含业务功能在里面的充血模型。

这样不好。老老实实让小妹妹帮你拖鞋不好么。

4.Dao

Dao一般而言,都是用来和底层数据库通信,负责对数据库的增删改查。

是的。他就是一个Dao。他从来不关心这些货物要去哪里,他只关心。入库,出库,查询和更换。

所谓的CRUD就是创建,读取,更新,删除。

Dao最好都是要独立出来。

到现在为止,最佳实践就是一个Service只对应一个Dao。Service会做一些额外的检查,如货物是否损坏,入库单是否完整,等等等等。

我并不推荐在Service里调用多个Dao,也推荐在Service里调用多个Service,大多数情况下我都不推荐这么干。

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料


本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

片转存中…(img-iwsmdOVm-1715720475134)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 29
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值