00:00
我们接着来看啊,看一下第三个小的知识点叫业务层。呃,业务层的概念是什么呢?我们一起来看一看啊。首先呢。第一个我们现在要正式的给大家介绍一下,叫MVC。MVC。MVC啊,它是我们这个,呃,是我们的这个开发呀,我们软件开发当中的一个架构模式,一个非常经典的架构模式。啊,当然这个价格模式呢,后面在不同的技术,技术领域呢,它会有一些延伸。它会有一些这个升级啊,但是这个最原始的比较经典的就是叫MVC。那么早期呢,我们有叫所谓的叫MODEL1和MODEL2。叫MODEL1和MODEL2,这个大家只需要做个了解啊,MODEL1和MODEL2是什么呢?Model。和model。那么MODEL1这样的方式呢?
01:00
比如说大家有一个技术没有学过,叫GSP。我们早期的时候呢,是这样的,同学们。早期的时候。这是我们的加班应用程序,这是我们的数据库,叫DB。啊,我们在Java应用程序里面,我们modele的方式,我们这就是JSP页面,这就是我们的JSP页面,稍等一下啊。我们这是一个JSP页面,我们在页面上JSP页面上啊,JSP页面其实是什么呢?其实就是HD。HTML加上Java代码。这就称之为叫JSP。好。那么这个GSP当中充斥着大量的内容,一部分内容是HTL。CSS。GS,这是第一部的内容。第二部分内容。第二部分内容是Java代码。Java代码。
02:01
从。数据库啊,核数据库通信。通信的代码。那么还有什么代码呢?第三部分,Java代码。第三部分Java代码是什么呢?是将。Java数据展示在页面上。啊,展示在页面上的代码。所以说这个JSP里面啊,它所包含的内容比较多。啊,所以这个GSP给人的感觉看起来比较的乱。这个是MODEL1啊,它存在的形式,MODEL1存在的时候,我估计大家估计还还没出生吧,估计。啊。一。差不多在差不多那个时候是在2000年左右。啊,在在2000年之前嘛,啊在两年快到2000年的时候。叫MODEL1啊。大家应该还没出生是吧,这个。
03:00
啊,那个时候,那个时候已经开始打酱油了吗?那这个大家年龄和我差不多,我也开始打酱油了吧,好,这叫MODEL1啊,下面一个叫model。MODEL2是什么呢?这个MODEL1和MODEL2 model2我们就可以把它这个比较,呃,模糊的理解成就是MVC。是这样的,MODEL1和MODEL2的关系相当于是什么呢?就像我们建房子一样的,就像我们建房子啊。如果说你今天是为了达到你有一个避风挡雨的一个地方。你可以建一个茅草屋,甚至于你可以去找个山洞。把山洞稍微打扫打扫,这就是你的房子。是吧,比要求比较简单嘛。啊,或者你自己去去去去搞几块砖头对吧,搞点水泥,你自己砌砌一个砌一个小的一个一个一个房子是吧,你就可以住进去了,这样就可以挡雨了嘛。就这样子。但是呢,我们现在的建筑动不动你这个有五六层,七八层,十几层,二三十层对吧,甚至于100多层。
04:01
那你想想,你还能再像建茅草屋这个,建一个小房子那样去去去去建这个建筑吗?那肯定是不行的是吧?同学们肯定是不行的,它的规则肯定会要求的非常的严格。那么同样的道理,我们说举举的例子,举的是建筑。啊,不同的建筑,从茅草屋。山洞一直到高楼大厦,这是不同规格的建筑。不同规模的建筑。那么对于我们软件也是一样的。如果大家仅仅是想做一个水果库存系统,对吧,做这样的一个小系统的话,无所谓啊,你要model用MODEL2无所谓啊,我更倾向于大家用MODEL1。开发功能很快,一会儿功夫就建好了。啊,没有必要搞那么规范,我只要完成功能就可以了,但是如果我们系统,我们项目的规模越来越大,同学们。如果项目的规模越来越大,我们必须要把我们的系统做的足够的。啊,足够的严格,足够的有有有规则。
05:02
我们这个称之为叫系统的健壮性程序的,健壮性系统的叫可扩展性。先简单了解一下啊。那么MVC它是有三个单词组成的,叫model。Model是什么?Model叫成叫模型。V称之为叫视图,叫view。叫视图。C称之为叫CTR控制器。好,我们称为叫控制器CTRL,这三者他们的角色是不一样的。试图就是用来做数据展示。以及和用户交互的一个一个窗口。比如说用户一个表单,你给用户给填一些数据,对吧,评论发表评论。然后我们页面上我们有一些列表,可以展示一些数据的一些信息,哎,这叫视图层。那么控制器是什么?
06:01
控制器是不是用户可以通过通过这个视图啊,可以给我们服务器端啊,点超链接点按钮可以发请求嘛,发请求是不是我们的控制器能够接待他呀。是吧,同学们。然后。控制器把你这个请求接下来了啊,接收到你的请求了,接收到请求之后,具体的你要往数据库添加什么数据,是不是不是我们控制器做的事情啊,我们是不是写了个DA啊。DA属于什么?DA就属于模型。还有我们写的P,它也属于模型。好。我们来写一下。视图层,也就是view这一层。它主要用于。用于做数据展示以及和。用户交互的一个通道。大家想想,想想是不是?啊,交互的一个界面吧,也行啊。这是图层。那么我们的控制层。
07:01
控制层。比如说能够。接受客户端啊,客户端的请求。是不是他可以接收客户端的请求。那么具体的。具体的业务功能。还是需要借助于。模型。来完成。是吧,同学们,模型组件来完成。哎,就这样子。再往下我们有模型层或者叫模型吧,模型层也可以啊。那么模型分为很多种。分为很多种。我们有比较简单的,有比较简单的pogo。就是我们的对象属性私有的private提供get set方法,它是不是作为作为我们数据数据的一个载体啊。哎,是吧,同学们,我们把数据库里面的一条记录,是不是可以把它封装成一个P无接入对象啊,那这一个P无接入对象是不是就是就是就是这一条记录这条数据的一个载体啊,叫P5接。
08:03
我们也称主叫VO。叫value object。叫直对象也可以啊。还有什么呢,有业务。业务模型组件。还有什么呢?由数据访问层组件。啊,所以这个模型层它分为好几个。第一个。P,或者叫view。第二个叫DAO。第三个叫Bo。叫叫object。叫业务对象。好,这个称之为叫直对象。好,这个称之为叫数据访问对象。下面一个事物叫业务对象。Po go VO以及do,这个我相信大家应该都有所了解。
09:02
是吧,Do,咱们不是已经建了的do了吗?啊,但这个B好像我们还没有接触的啊,叫object。叫业务对象。所以呢,下面呢,我们就要把数据访问对象和业务对象把它区分开。区分。业务对象和数据访问对象的啊,就区分嘛。我们怎么区分呢,第一个。DA对象啊,DA中的方法都是。单精度方法。什么叫单精度?什么叫单机度?就是一个方法,只考虑一个操作或者一件事情都可以。啊,一个方法只考虑一个操作,或者只考虑一件事情。音色的添加,我就只考虑,我就只执行音色的。
10:00
比如。比如添加,那就是音色的。操作。查询,那就是。操作。啊,修改就是update等等等等等等好。这叫单精度。那么。Bo。中的方法属于。业务方法。而实际的业务是比较复杂的。啊,是比较复杂的。也就是说,那么因此。因此业务方法的力度是比较粗的。我们叫称之为叫粗力度方法。上面的单机度方法我们也称之为叫细粒度方法。啊,低重的方法都是单菌的方法。或者称之为细力度方法。来,这两者是不一样的,下面我就来举例子。
11:00
注册这个功能。注册。这个功能。属于业务功能。啊,也就是说,也就是说注册这个方法属于业务方法。那么这个业务方法中包含了多个。DAO方法。也就是说。也就是说注册这个业务功能。需要通过多个DA方法的调用组合啊组合调用。从而完成。从而完成这个功能啊,从而完成注册功能。是吧,同学们,比如说我举例子啊,注册。包含哪些功能呢?
12:00
第一个。检查用户名是否已经被注册。这是不是属于do?中的查询操作。是不是啊?再来。添加。像。用户表新增。新增一条新用户记录。这是不是属于DA中的音色的操作?再来。第三个。向用户积分表。新增一条。记录。也就是说,新用户。默认初始化积分100分啊,假设有这么一个规则,那这个是不是do中的音色的操作。是不是第四个像系统消息表。
13:00
新增一条记录。某某某新用户。注册了啊,需要根据,比如说需要根据通讯录啊信息推送啊,向他的好友。向他的联系人推送。推送消息。那你想想这是不是也是DA中的音色的操作?我向我的系统消息表新增一条记录吗?等等等等,有好多的,还有我们的系统日志表,某某某用户。IP地址是多少,在几年几月,几分几时几秒,几毫秒注册了。这个账号。这是叫系统日志表。向系统日志表新增一条记录。某用户。啊,在。某IP。在。某年。
14:00
某月某日某时某分。某秒。某时某分某秒某毫秒。注册。哎,这应该也是DA中的音色的操作。是吧?等等等等,后面不写了,第六个不写了。所以大家千万不要小看一个注册功能,一个注册功能其实它属于一个业务功能,是比较复杂的。我们这里面还没有把所谓的叫验证码。发送短信、验证码等等等等,还没有把这些逻辑拿进来了,所以拉进来的话,这个业务功能会更麻烦。那么我相信通过我现在这个描述,大家应该已经有一些体会,我们的一个业务方法,它是不是比较复杂呀,而这里面的一个一个的方法是不是都属于单精度的DAO层的方法呀?没问题吧,同学们好,现在开始我就慢慢的把业务开始加进来了啊,把业务层把这个概念把它加进来了。好,这是我们所说的什么是业务层。
15:02
OK。那下面咱们进来把我们的系统把它改造一下,我们把业务层把它加入进来啊。行。我们的PROJECT17这个我是把这个项目拷贝了一份,但是我代码好像还没有开始有改动吗。是吧,同学们,我应该没有改动,那我就在PROJECT17上面,我把业务层把它加进来行吗?同学们。当然了,我得先给大家先说一下啊,先说明一下,因为我们现在这个fruit库存这个管理系统啊,它的业务功能比较的简单。啊,所以大家会觉得这个业务层的这个对象里面的方法呀,极其简单,比较重复代码重复感觉和DA层。感觉像是一码事啊,会给大家造成这么一个这么一个认知。但是我想讲的是,大家放心啊,等到你到企业里面去的时候,你的业务层的方法是比较的复杂的,不可能是简单的对低业务层的调用的。
16:01
啊,因为咱们现在是学习嘛,业务是尽量简单啊,所以会会给大家造成这么一个误解来,现在呢,我在这里面我写个叫BZ。叫business,叫业务层。然后呢,我来写个接口,这个接口叫service。Service service就是服务嘛,业务服务的意思哦,我写的接口。大家帮我想一想,我需要有哪些功能呢?业务方法,第一个展示首页面的时候,我是不是需要有一个叫list的。Fruit。Get fruit list。然后我你必须根据Q的查询,你还得告诉我page number是不是。好。获取指定页面的啊,库存列表信息就这样的。我还得有添加库存记录信息。我还得有查看。啊,叫根据。ID查看指定。库存记录这么一个功能我还得有,删除特定库存记录这么一个功能我还得有,还得有查询获取总页数。
17:11
总业主这样的功能。添加库存记录,我们就一个个写ADD fruit。弗洛特。福特。根据ID查询。Flu get fruit I I。In ID。或者byfid吧。再往下删除void delete float。Inter f ID。再往下总页数。Get page count。子俊,Keyword。没问题吧?我直接去写的原因是基于大家前面的代码已经练了啊,所以这些方法我就直接写了。因为业务功能确实比较简单啊,咱们当前这个系统。那行我得写个时间类,ipl.fruit service m PL。
18:02
好,我让他实现一下service。就这样子,那我得实现它里面所有的方法,没错吧?那么这些功能的实现是不是都要依赖于do啊?因此,Private float do fruit do等于new。Flu DA,安。好把它加进来,然后他直接就用do.get fruit list。把Q的扔进去,把我们的配件拉,把它放进去搞定。下面一个是添加。Float do.ad float。搞定。再往下面一个是查询点get啊。点get fruit byfi。啊,这就是我说的,大家会误解成老师,你不觉得这个service是很很啰嗦吗?就是对于DA的一句话调用是吧?那是因为当前的业务比较简单行吗?同学们。啊,但是业务层我们确实是需要的啊。再来删除。弗洛do.deletefid。
19:03
下面一个是获取总页数。那获取总页数float do.get我们一个叫float count,根据K的获取,它得到的是一个总记录条数吧。总记录条数,所以我们需要把当中的代码把它挪过来。我们找到,也就是CTRL找到他。我们找一下。是不是在这边啊。没错吧,就是这个代码CTRLC。拷过来。我们把它放到这里面来。Count count加五减一再除以五,没错吧,最后把它返回配g count。那这样的话,这样的话,我们CTRL这一层我们就不需要再去,不需要再去计算了吧。直接是不是配g com。是不是就等于我们设备里面进行进行第一个调用啊。行,现在我们service我已经把它全部写完了,写完之后你注意了,来我们来画个图啊。回到这边来。好,这个我就把它删掉了啊,不要了,重新新建一个。
20:02
这是我们的客户端。这是我们的服务器。这是我们的数据库,好。来。现在呢,我们。上面是我们的CTR。这边是CTRL。以前我们CTRL是直接调用我们下面的DAO层的组件的。这是我们do层的组件。Float do啊,这是我们do层的组件。好,差不多啊,就这样。叫float啊,那行。本来controller里面是直接去列出do,然后直接调用的是吧,现在在do的上面我们多了一层。
21:03
我们多了一层service。在这。啊,弗洛特。Service。我就只写flu service,没有把fruit service po以及fruit do p画出来,没必要啊。所以我们一个请求过来的时候。啊,他可以丢我们的CTRL。Controller对他这个请求进行响应,那么controller会去调用service当中的方法。Service内部的方法又会去调用do层当中的方法。那么第层当中的方法会和数据库之间来进行通信。比如说查询获取到数据库的信息,数据库的信息再返回给do层,那么do层会有返回值返回到我们的设备子层。然后设备支撑,设备支撑。再把数据再交给controller。那么controller再把我们的数据响应给。应给我们的dispatch。
22:02
有印象吗?P。没错吧?在我们的PA当中,我们会有视图处理。哎,是不是啊,试图处理,比如说如果是重林项,我们应该怎么办?如果是time lef,我们应该怎么办,是吧,同学们。就这样子,然后我们dispatch再回去,再交给我们的客户端。哎,就是这么一个过程。好了,我们的dispa这个当中,它会通过反射机制啊,去定位到具体的ctrler,然后去执行CTRL当中的特定的方法,没错吧。所以我们现在就把这个service把它加进来了。把它保存一下啊。123咱们应该是MVC04。放到这里面了。零一.mvc04。
23:00
所以呢,下面呢,我们的CTRL,我们需要把CTRL当中对于DA的这些调用,咱们要把它删掉,改成对于service的调用是吧。所以回到CT里面去找到ctrler。好,也就是当前的孔了。那么在computer当中呢?我们在这。这边我们本来写的是do嘛,现在把它删掉。我删掉了。好,然后呢,我们profit flu。Service service等于new service,没错吧?然后service update。哎,这啊,我没写啊。哦,我好像还真没写,那补一个吧。没有修改的是吧。没有修改的补一个吧啊。修改特定库存记录。VO update flu flu flu,行吧,同学们补一个啊,行,再回到这边来。重写一下。好,Float do.update float行写完了。
24:02
再回到这边来,他就不应该报错了。再往下这个是查询嘛。根据ID获取。这是删除嘛,Delete。再往下这是添加码。service.add。好,Index index是查询查询,我们来看一下啊。在这。把这一行删掉吧。是不是改成service的调用啊?然后service是不是一个叫get page的,我记得。是不是啊,Get page count,那是不是就直接获取到page count了?那这行就不要了。啊,就把它变成这样了。行,现在我就已经已经把service把它加进去了,好,DA的这些都不需要ctrl shift o。好,把这些全部去清掉啊。没问题,那下面咱们要试一下,看他行不行啊。哎,不行,我现在这个还没部署呢。
25:00
我看一下啊,幺八,咱们应该是幺七是吧,同学们。嗯。Deploy,咱们加一个啊,还不能这么讲,咱们artif被我删掉了是吧,点一下删除啊。回到out目录,把这两个都删掉吧。好,然后呢,找到stru,找到artifacts,把这玩意删点加号。Model,咱们把幺七是吧,同学们把它拿进来,点一下应用,点一下OK,咱们再来部署。回到这边来,山再点加号。好,就是它PROJECT17。好,点击应用。然后咱们应该是腰。七后面咱们写的是不是叫float点度哦。没说吧?这改成叫deploy,这改成叫update,请应用一下。好,OK,再启动。那现在应该就没有问题了啊。
26:01
所以说我们这个啊,业务层的知识说完之后啊,我们就要去改写。这个。就这样吧啊。好把这个。方向多一点啊。好,就这样啊。这第二步,然后这是第三步。就是说在库存系统。添加业务层。行,这个就不写了啊,咱们就把它加在这,我们再回到页面看一下对不对啊,你看页面是不是还能正常显示啊,啊,那说明是没有问题的。
27:00
这样我们就把业务层把它加进来了。
我来说两句