00:00
好了,咱们继续吧啊。呃,我们今天呢,主要是讲一下m Mac架构模式啊,系统扩展MVC架构模式这一块的,然后呢,第一节课呀,咱们其实就是让大家体验一下,我现在在这个项目中呢,没有使用Mac架构模式,整个这个程序你看一看是这样的。他当前的这个呢,他这个人呢啊,他做了很多事情。他负责数据的输入,负责数据的输出,另外呢,他还负责我们的GDBC,另外还负责我们业务逻辑的处理,他一个人呢,做了四件事情。这样的话呢,它违背了一个开发原则,就是高内聚低耦合的开发原则,不够专业,这样的话所有代码耦合在一起。扩展能力差,组件独立性差,什么意思?以后这个所谓语句有可能在其他程序中还要用。以后这个阿PA就可能在其他业务流程中还可能使用,如果到时候的话,你还得再写一遍吧,所以我们有必要把这些东西抽出来,比如说专门有一个人去做数据的输入。
01:07
专门有人专门做数据的输出,专门有一人做JDBC,专门有人做业务逻辑都非常专业了,明白吧,那这样的话达到we部系统的职能分工,这样的话我们就遵守了高内聚低耦和开发原则,这个原则一旦满足之后,我们组进的独立性就很强了,独立性很强,独立性强的话,我们富用性就很强,在哪个地方都能用。能移植,就像我说内存条不要跟板子融在一起,内存条是独立的,内存条可以换到其他计算机上用是没有问题的,可复用嘛,可复用可重用性嘛,是吧,所以我们要注意这个事儿啊,大家看这个程序很烂啊,写成这样了。全都融到融到一个类里边了。好,那么接下来我们就来写第一个MC架构模式的一个程序啊,呃,我说一下啊,今天呢,大家练最后一个版本就行。啊,我强调一下,今天呢,我一直会写版本一,版本二,版本三,版本四,版本五,版本五,到最后呢,你就写最后那个版本是一个成品,明白吧,这个版本呢,是循序渐进的,我不会一次一次写成功啊,我会挨着排往下写,那这样的话,你练最后那个版本就行了啊,中间那个版本都属于不成熟的版本啊,行了,咱们看第二个版本啊。
02:24
呃,第二个版本我看看怎么怎么行吧,我就还是从零开始了啊,从零开始吧,我就不再复制了啊,可能复制的话可能会会出问题了来NVC_B啊还是二吧,嗯,这边呢,这个名还是这个bank吧,啊还是这个B。行,我们这样的话,把这个选上啊,然后我们finish。OK了啊,这边呢。一。这个我们可以先移除掉啊,因为他部署的时候的名字是半个吧,咱们移除掉好OK,是移除和他看的服务器之间的关系啊,它这个项目还是在这个满一个粒子里边。
03:08
那么接下来呢,咱们来看一看,比如说这个页面吧,那这个服务器先停一下吧,啊来这个先清掉。我们来看一看这边。这个啊,我们把这个复制一下,这个啊和这个复制过去吧,咱们放到这好了。还是这个SQL脚本啊,我再重新执行一下,把数据恢复一下,好又五万一万了吧,好了啊,继续read me文件呢,我来说一下啊,使用Mac架构模式啊。分析优点啊,分析优点就行了,其实就是很重要的外B系统啊,职能什么分工啊,职能分工达到什么,或者满足什么开发原则,满足开发原则是高内聚低耦合啊开发原则咱反这个主要啊是为了提高扩展力啊,提高什么组建的可重用性啊,可重用性这个啊可性。
04:28
行,我们来看一看啊,这边呢,这块的这个文件我就删了吧。这个文件我就删掉啊,然后呢,我把这个文件复制一下行吗?放到这好这个JP还是这个吧,不动啊,那么接下来呢,咱们剩下的程序这个U呢,我有必要复制一下翻过来啊,这个U过来了,行了,就这样这个项目就关掉了啊。关掉,嗯,就留这一个项目,那么接下来呢,打开这个JB,点这个转账,发送这个请求是吧,还是走到什么web查账文件吗?在插面文件中呢,我们其实也可以把上面的复制一下是吧,上面不是也有个插面文件吗?把这个文件也复制一下吧,我一个一个复制啊,把这个复制一下,然后呢,放到我们这个位置上给它替换掉啊,然后替换掉之后我们把这个live。
05:25
复制一下放到这行吧,翻过来好了,那这样的话有了,那这个咱们就先关掉啊来这个我们先关掉。来,我们再来看一看,当我们点击转账的时候,会找到配置文件中的这个类。啊,这个类是不是还没有写呢啊,开始了啊,我们开始写一下,呃,写的话把这个包见一下。嗯,好了,这边呢,我们建个包。这个累啊。
06:02
我建议一下啊,接过来继承这个STP怎么来行吧,好,Finish。行了,我们就还是写这个类,嗯,还是写这个类啊,那么接下来呢,我们是不是。应该在这啊使用什么呢?MVC架构模式啊,开发应用,达到web系统的职能分工啊职能分工呃,有专门的类完成什么,专门的类完成数据的输入。有专门的类。完成数据的展示啊,数据的输出。有专门的类,举什么专门的类,处理业务逻辑有专门的类。
07:11
处理什么CD啊,操作CD指的是增山改查啊create吧,呃,是retri是吧,还有一个是update,还有一个是啊出据的责任来查。好,这边呢,我们还是老规矩吧。就直接重写一个方法,这个方法呢,咱们叫do both的方法就行了,来这边呢,我们request response。呃,这边我看一看啊,数据的输入,数据的输出,数据输出也务逻辑处理也有逻辑,先这样啊,这个写了放到这这边我改下序号啊234。
08:02
好,我开始讲了啊,Mac。转账执行这个类啊,这个类呢,我们。写的时候要注意了啊,我们要达到外部系统的职能分工,提高扩展力。或降低啊,降低耦合,提高扩展力,提高组件独立性。和提高组建的可复用性啊,可重用性吧,行了,这样有专门来完成数据的输入啊,专门来完成业务逻辑数据,专门完成CD,专门类完成这个数据的输出,那这个里边这四个人,哪个哪个人应该当做是当做是司令啊指挥官,哪个是指挥官呢?咱们给他定一下吧。
09:01
比如这个负责数据输入的话,咱们交给谁service行吧,然后负责业务逻辑处理的话,我就交给另外一个类吧,这个类我叫我给起名叫service行吗?啊,我就给它起名叫service啊,一看这个名就知道这是干什么的,Service类类是完成数据的输入吧,Service这类完成业务逻的处理吧,这一块呢,我就交给另另一个类啊,这个类呢,我就叫告类吧啊,DADAO类啊,DAO呢,说一下DAO指的是数据访问对象啊,Get数据access object啊,So。然后这个数据的输出你交给谁啊,Cid吧,这个类行吧,交给你,那么这几个类里边,你觉得谁应该是司令呢?谁是总指挥官。谁是总指挥官啊,应该谁是入口啊。它是入口了,它是不是入口,它是总司令吧,所以我们把so that啊so that这个类呢当做总司令啊总司令。
10:03
司令是吧,总司令啊,就是指挥官啊,指挥官核心控制器啊,核心控制器我们叫什么controller对吧,他去调动谁。调度。Service处理什么?业务。然后调度谁调度JSP啊,来完成页面的什么展示啊,也就是说呢,其实这是一个人是专门处理业务的,这个人是专门干什么的。处理页面展示的这是一个总司令了,这是一个控制器啊CTRL了,那么接下来呢,这个调用啊,其实service啊,我们说这个service其实不太合适。我们应该调用什么呢?再换一换一个说法吧,其实是调用这样吧,写到前面得了啊,是调动啊,Model model啊,完成业务逻辑的处理。
11:14
调用什么呢?调度吧,啊调度view啊完成。页面的展示,那如果是调度这样的东西的话,上面调度的业务逻辑的话,我们就调调,当然调谁啊调service了,我们把service起个名叫什么model,然后呢,我们把JD这块起个名叫什么view行吗?我只是个名字啊,大家别多想,首先是这样的,我们就分一下层啊,分一下工,我们这是个团队嘛,你有干这个的,你是做这个的,你是做这个,你是做开发,你是做售前,你做售后的,你是实施人员啊是吧,你是这个销售人员等等吧。所以这边我们分了工了啊,原先呢,我们这个类呢,完成的东西很多,现在呢,我们分工一下。呃,有专门来完成数据的输入,专门来完成业务逻辑的处理,专门来完成CD啊,专门完成什么呢?我们页面展示吧,数据的输出啊,那这样的话,咱们就把这个server类呢,当做总司令这个因为它是入口,最初的时候用户会点什么转账是吧,他一点转账就发送这个请求,他一发送这个请求找到插面文件,在这插面文件中通过这个路径找到这个类,找到类之后其实就找到了总指挥官,而这个总指挥官呢,他是个老板,就相当于是这个公司的老板,他说秘书过来,你把这个事给我处理一下,他不自己处理。
12:36
明白吧,他调用model去完成什么业务逻辑的处理,明白我意思吧,但是呢,最终呢,你想一下这个model会不会把这事做完。这个秘书把这个事儿完成了是吧,老板,我这个事儿你交给我的任务完成了。总司令,怎么办呀?行,来,秘书二过来把页面展示一下。明白我意思吧,他有好几个秘书啊,有专门是处理什么业务逻辑的秘书,也有专门做页面展示的,明白我意思吧,所以它是一个总的总的指挥官,它是一个总的核心控制器调度中心,它是调度model完成业务逻辑处理,调度view去完页面展示,但是我们具体的话,大家想现在这个技术,我们这个view这个技术。
13:20
是不是?就用GP就行了,除了GP之外,后期啊,你们还会有其他的啊,除了JSP之外啊,还有其他的页面展示技术啊展示技术,比如说你们后期要学的free marker啊free marker就是也可以做当做JP来用的啊,所以总之呢,咱们这东这些东西我们就都叫什么view吧啊view是啥意思?视图吧,啊视图这个呢,模型是吧,模型啊是模型模型层嘛,是吧?模型层这是什么层,视图层啊,这是什么层。
14:04
控制器,这是控制器啊,叫控制器,所以总体呢,我就把把这个概念分析出来了,实际上是你JSP这边提交数据,而我底层这个总司令呢,拿到数据之后,控制器接收到,而这个控制器去调度我的model完成业务逻辑的处理,而我们处理完这件事之后,会返回给我们控制器,控制器拿到这个数据会调用另外一个view去完成页面展示,其实这个MVC就出来了。M指的是什么呀?Model吗?View指的什么呀?View c指什么呀?Controller哪个是司令啊这个。他去调这个完成什么,MVCC去调model,去完成业务逻辑的处理,C去调用view去完成什么。页面的展示吗?能理解吧,分工协作了,这个系统一共几个人了,现在。其实哎,变成三个人了,一个人去做控制,一个人做什么呢?业务逻辑处理。
15:02
它是总司令调,调你,你就得给我做事,我要是调你,你就得给我做什么一面展示,你要记住JSP式子是是不是一个加法类。他是个来吧,是不是这是个是个那个Java类啊,所以Mac就是这样的,有同学老师不对啊,掉了一个人呢,你把这个人丢了。这个人是专门做CD的,到吧,还注意了道也属于model。因为大家知道service最终会叫什么,调用service处理业务吧,但是要记住,但是service在执行过程中必须处理数据吧,Service也有秘书。明白吧,叫什么叫做道?就你明白我说的意思吗?就说这个司令呢,就或或者是这个叫什么这个这个这个这个这个老板老板说了啊,秘书过来。
16:00
你把这个事给我处理了啊,这一客户要要求转账,你给我转账吧,你把转账给我事处理了,然后他最后你想一想这个model他要不要去处理转账啊,他在处理转账过程中需不需要去操作数据库啊,需要,但是他不亲自去操作数据库。他不会亲自去操作数据库啊,他去干什么,去调用他的秘书,他的秘书叫什么道。去干什么?处理出数据的增长来查。能理解我意思吧,所以最终呢,大家想一想,这个程序是不是变成这样了,Night叫什么?Service service调谁到了?到最终返回给谁service吧。是吧,So呢,再访问给谁吧?So that呢,在这呢,我画一下吧啊。没法画这个。能画吗?他叫谁?我再我再简单画一下吧,啊这个哎哟不能画,这个能画吗。
17:10
哎哟,这个图不好画是吧。还对不齐呢。这是缩进一下,我想表达表达这么一个意思啊,希望大家能够理解这个MC不好理解这个东西。没法画。看写了啊叫什么,你看啊,实际上啊,这就是什么。M,这就是啥,VC就是啥呀?C,你看啊,这个最终啊,不是有人客户吗?客户是不是发这个数据给控制器了,控制器说秘书过来把这个model的是调model层嘛,调model层完成业务逻辑的处理,完事之后呢,Model会最终返回给控制器,控制器最终呢,会根据这个结果来调用什么?
18:06
调view完成展示吗?这就是M嘛,这就是V,这就是C,但是M分两层啊,一个叫service,一个叫什么,到哪个是更高层的,Service更是更高层,Service是专门处理什么业务逻辑的,来写上吧,这就是什么?写上控制器,核心控制器啊,核心控制器,调度中心叫调度中心,然后这是专门处理业务的吧,这叫业务层啊,业务层这叫什么?这个其实属于model啊,来model属于什么model啊,业务model这属于什么呢?这也属于model啊,Model啊,这属于什么?Model属于数据,Model数据模型。然后这个是什么呢?这是什么层,叫视图层啊,视图层专门做页面展示的啊,专门完成页面展示的什么组件。
19:07
这就是Mac。是样的。有什么不理解的吗?反正就是一段话嘛,给他画这个东西,也不知道你能看没看,能不能看明白啊,就以这个意思这个箭头啊。这是个箭头。嗯,这是个箭头吧,这里可以先忽略掉啊,MVC就是MVC啊,C就是控制器去调用model层完成业务逻辑的处理,去调用视图层完成页面展示,但是你model层要注意啊,你的model现在呢。你在底层处理业务,但是业务在处理过程中肯定会关联数据。那这个时候数据的处理他会交给另外一个类去完成,这个叫到DAO以后会学很多啊,什么DAO是吧,什么PAO,什么pole啊pole还有什么d to,什么Bo啊,这个DAO只是其中一个,这属于什么设计模式啊,这个告诉大家啊,这属于加vae的设计模式,DAO呢,这个名字是加vae设计模式中的啊,加va EE的设计模式,记住我说的不是G啊。
20:13
G呢,指的是另外的设计模式了,现在说的是加完的设计模式。DAO啊,知道就行了。DAO指的是。数据访问对象。总之呢,由第一个例子演变成这个了,第一个例子再强调一下,没有用任何什么ivc,所有事情都是一个人去完成的。到了第二个例子之后呢,我们现在这个事儿啊,又有了一个明确的分工了,我们数据来了之后给了谁呢?控制器,控制器呢,会调用我们的service完成业务逻辑的处理,业务逻辑处理完事之后会返回数据给控制器,控制器根据这个数据来跳转到我们相关的JSP页面,第二我们视图层完成页面展示,其实这是个组件吗?后边这是个组件吗?也是组件吗?嗯,这也是个组件啊,三大组件组合在一起形成的什么MVC架构模式m Mac架构模式呢?它实际上是从横向上去表示。
21:07
啊,从横向上去表示是这样的,我简单解释一下啊,从横向上我们叫Mac,从纵向上其实还有另外一个分层方式。注意啊,分层方式呢,可以分为什么呢?横向和纵向啊,横向横向层次和纵向层次啊,来先说横向层次吧,行吧,横向层次呢,其实说的是MVC了。这是横向上就是这样,纵向呢,纵向层次呢,这个我还没有提啊,纵向层次呢,这个serve that被当做什么。可以当做表示层,表示层下边呢是什么呀?Service service呢标是业务逻辑层啊,或者叫简写叫业务层,其实再往下的话,它还有一个分层,这是纵向分啊,还有个什么倒吧,那个倒啊来。
22:13
到这个叫什么叫持久层,叫持久层,横向分叫Mac,纵向分叫表示层,业务逻辑层,持久层没有谁的事了。没有那个view了,不说那个JSP了,他现在就说这三个类service来叫service,调完service service要到到返回给service service最终返回给service service类根据这个结果来跳到这和跳到这吗?是这意思吧,纵向分是表示成业务层和持久层,持久层框架我简单提一提啊,持久层框架啊,后期学习的什么,后期学习的AB加abab以及habit等都属于什么呢?持久层框架service呢是业务层啊,业务层叫业务层框架啊,后期学习spring啊,Spring在这个表示层的啊,表示层框架。
23:16
后期会学习谁啊,叫one啊,Two等等,明白我的意思吧,那你看SSH就出来了。SSH就出来了啊SH。横向和纵向分的不一样啊,咱们现在是主要讲什么横向纵向我基本上就不提,我现在就是简单提一下子。我我我我不会讲这个啊,但是我现在提一个事儿啊,以后不能说,提起来表示层你不知道说的是什么,提起来业务层你说的什么,提起来持久层你说的是什么,就主要知道啊,现在咱们主要从横向上分析。
24:01
咱们以前不是说了吗?在第一第一个项目第一天的时候,我好像给大家说了啊呃,有一个阶段叫什么叫分析和设计阶段,对吧?分析和设计阶段包括两个,一个是什么?是分型设计啊,架构的分型设计,一个是什么。业务逻辑的分型设计吧,还有就是界面的设计吧,所以呢,第一个就是架构的分型设计,架构的分型设计呢,第一个包括物理架构和逻辑架构,物理架构指指的是什么?物理架构指的是什么?在地理位置上我们分布几个数据库,几个仓块的服务器,是吧?这是物理架构,逻辑架构指的是什么?底层用几层吧?还记得吗?两层三层还是model什么one还是model什么to吧,Model one告诉你啊,刚才我们在第一节课的时候,那叫什么?Model,一个人是把所有的事都做了,Model to,其实严格意义上讲,其实说的就是什么Mac。我们要经常用Mac架构模式去做。有一个核心的司令官,这个司令官呢去调度调度service完成处理,调度没有完成视图,完成页面展示。
25:03
这是两个秘书啊,然后这是老板。是这个意思说是这么说,代码得怎么写,接下来我们就是开始实施进行代码阶段,要进行代码阶段之前呢,我还得给大家说一下这个文档啊,这个还是比较重要,分析阶段还是相当重要的,我们打开这个,打开这个零七,打开我们的document,打开这个我们从数据的角度去再去把系统分析一下啊,大家一起来分析一下看好了啊,来打开这边呢,我们打开零七,打开document这边呢,我们给它贴过来放到这,然后这个改成12来这个重点啊。嗯。好,大家看这个图里边哪个是M。是吧,C吧C吧,好,最初的时候我们不是这么做的,最初的时候怎么写的。
26:04
最初的时候没有他。没有这个吧,啊都没有好,这个是不是没有啊,是怎么访问的。他发送提交数据给我们来吧,来是不是直接连出一步了,然后他返回给来吧,最后做页面展示,自己是不是做页面展示啊,你这个是不是也没有啊。最初就是这样的,或者说我们前几天啊,是不是都这样写的,我发送处理连数据库直接返回OK了,跳这或者跳哪啊跳这吧,就是这样。这就是摸多体啊哇。Model to mvc架构模式指的是这个啊,也就是大家看真正啊,人家还管吗?不管了,是这边提交数据给我们控制器了,控制器这边呢干什么,他有个秘书了,他说你秘书过来给我把这个事处理一下,然后model service呢,就把这个事呢处理了,但是service在处理过程中要不要操作数据库。
27:02
他不去亲自操作,他把这个操作数据库这个事儿你交给谁了。到再操作数据库,然后数据库返回给到,到最终处理完之后返回给service service把这个结果拿到,再返回给资料,四六拿到之后呢,就根据这个成功或者失败,跳到调用什么视图层成功或者是调用视图层失败做页面展示,这就是MVC架构模式嘛,做了一个很好的明确的分工,明白我的意思吧,就事呢不是一个人去完成了,这叫什么分啊,这叫横向分,是MVC。纵向分呢,我说一下这个,其实我们还有一个词叫什么。我们说了叫表示层对吧,这个呢,是不是有一个词叫什么业务层是吧,这有个词吧,叫什么。19层吧,啊19层我说一下啊,纵向是这样的,横向分的话你就是mbc了,这俩都是M,只不过这个叫什么model吧。
28:10
这叫业务model,这叫什么model,数据model,这两个都是model层、模型层。然后我们发请求给控制器,控制器调度这个完成业务逻辑的处理,调度这个完成页面展示实际上大体是三个人,123。三块。MVC,但是M这块分两个啊,一个是service,一个是告,告是底层的,Service是上层的,哪个里边写业务这个里的哪个写增产改查这个。这样的话,你想想这个增长改善能复用吗?这个增长改差这个类能重复使用吗?可以,这就是组件的复用性吗?这就是高内聚吧,是不是高内句低耦合吗?高内聚低耦合吗?专业了,我只做,只做这个事,我其他事不管,我只做这个事,我其他事不管啊,就是这意思,MV好这边写了啊,像这个什么service层代表框架spring吗?像倒层的代表框架,倒层的代表框架是什么?Have advantage,像这个控制器这这端的一个代表框架stress stress12web work成Mac吗?不都是吗?
29:17
啊,后期你们这个都会学。这个we是two,底层用的是web啊。SURPRISE1呢和二其实就差一个,但是它俩呢,其实有一个很大的改变啊,有一个很大的改变,完全设计的方方面就完全不一样了,一个是单立的,一个是多立的啊,Spring Mac等等们后期都会学这个东西啊,好,纵向的,横向的,横向Mac,纵向的是表示层,业务逻辑层,19层。啊,这个分析清楚好了,这个图呢,我就说到了这儿,就是来再从这个图上分析分享,好大家看一看这边呢,啊是不是浏览器,浏览器呢,它发送什么请求。是不是超额本传输协议的一个请求啊,请求过去之后大家想一想,大家看中间这个人呢,有点意思啊,他戴个耳机。
30:03
他戴耳机啥意思呢?他是一个核心的调度员,他这个事管吗?他不管事儿,当你请求过去之后呢,他去调谁是一个带着公文包的这个人是个model。他说调model去完成什么业务逻辑的处理,他最终处理完之后,会会会不会报告给他呀,会报给他之后,他根据这个结果是不是调这个东西啊,这个东西它是做页面展示的,所以Mac就出来M嘛,是吧,V是谁呀,C是它了,这就Mac架构模式嘛。分工协作啊,讲究的是分工协作,但是你要记住M,这包括两块,一个叫service,一个叫道。这个真正交付的是是到还是service?这个和service交互,Service在和底层倒交互,明白吗?啊是这么一个关系,这还有一层呢,所以这没画啊,实际上是它掉它,它呢,最终掉它,它返回给他,他再返回给他。能理解吧,啊,就是这样。
31:01
好了,M Mac就是这样的啊,Web系统的职能分工我说一下啊,这个MVC架构模式呢,有很多面试官可能会问你,就是说你给我解释一下什么是m Mac吗?你说M不能说这样啊,MVC就是M是Mo v是VC是ctrler,完了。说这么点不行啊啊,原理没有说上来,首先呢,你应该说清楚啊,不用MVC项目存在什么缺点。一定要把六个字说上去,叫高内距、低耦和开发原则,明白吧,然后呢,我们如果不使用MC,就是外部系统没有很好的职能分工,所有的程序都在一个类中完成,这样的话耦合度高不高啊高?不具备独立性,扩展力差,可重用性差,完了一堆的官话给他说呗,是吧,说上去完事之后你就告说MVC就啊是这个意思,系统的进行职能分工,外部系统职能分工就是我们用户请求回来之后给了谁控制器,控制器接入到数据之后的控制器不去处理这件事,他就调用model层去完成什么业务逻辑处理,Model完固层处理之后返馈给我们的控制器,控制器拿到数据之后调用view视图层完成一面展示嘛,这样外部系统很很好的很好很好的分工之后,满满足了一个开发原子叫高内积什么低耦合,扩展力强了,组建独立性强了,耦合度低了。
32:18
可重用性,复用性就强了,把这句话都说上去,这个就算答完了。啊,MVC架构模式这个很重要,后期包括你在工作过程中,你写所写的所有程序都是基于什么MVC架构模式的。明白我的意思吧,所以要会说啊,会说会描述就行了。好了,就是这个,其实你想跟我们现实生活中不一样吗?比如你今天出差了是吧,到了一个陌生的地方,你不知道附近有没有酒店是吧?哪里有酒店,你想问一打电话125801打对吧,对方有个美女记住了是吧,说有什么可以帮助你的吗?是你说我想我在哪哪哪是吧,你这个我这个这个这个这个附近有没有什么五星级酒店啊,在最近的哪个地方啊,怎么去怎么走,你跟我说一下是吧,你想一想这个话务员他他知道吗?
33:07
他他他大脑里边会处理这个事儿吗?不会在他前面有个终端对吧。是不是个终端啊,这个终端能办事,它掉这个终端明白吧,这个终端啪啪把事一处理,终端最后在那个屏幕上是不是展示出来一些信息啊,那这样的话,他把这个信息是不是。又发送给客户了,所以你想想在整个过程中有没有分工啊,有分工啊,话务员是干啥的?他是总量啊,他是调度的呀。你传话给了谁?话务员,话务员自己不不去处理这件事,话务员他交给谁了?终端去处理了。终端处理完之后返回了吧,返回画面拿到之后是不是再把这个画传传过去啊,这它就是个核心,所以大家想在MVC里边想一想哪部分是最重要的C。你没有飞,完全就是一盘散沙,结合不起来。
34:00
这个C就是扩性控制器,它是调,它完成处理调查完做页面展示的。他是管事的司令,明白我意思吧,啊,就这意思行了,说了这么多呢,应该是明白Mac了啊,讲了这么半天啊,又是理论又是画图的,又是这个那的啊,总之呢,接下来我就开始编程了,好,这边编程之前我们在这建班了啊。这边呢会增加几个包,这边我决定啊加一个包,这样吧,我选中其中一个包,然后呢,建一个包看好了啊。变动包叫什么到?呃,现在你这个是完成转账的。而你现在呢,这个service。我们写一个类这个service起名吧,叫什么service比较合适啊?这个service是专门处理啥的,处理账户吧。专门处理银行账户的是吧,那我就起名叫什么合适啊,这叫account。
35:00
行了,那就起这个名吧,啊来OK了啊呃,这就是那个叫什么那个办事的啊,底层办事的行了。行,我在这写成model层吧,Model层啊,业务逻辑业务层,Model层业务层业务模型啊业务模型,呃,在啊在业务层中编写只能编写什么,只能编写纯什么纯业务逻辑。不能编写什么JDBC代码,明白吗?在service层中编写的方法名啊,一般和什么有关?和业务逻辑有关。就是在service层编写的方法里面,一般这个起名的时候不要随便起啊,这个名一般呢,都和业务逻辑,业务逻辑有关系的,好,那想一想,大家想一想是不是这个。有一个秘书吧,是这个吧,那我问你这个有秘书吗。
36:02
是上面这个吧,所以呢,我们上面再来个秘书啊,这个是谁起个名吧,叫什么道。我强调一下,大家在起名的时候必须跟着我起啊,我起什么名你就起什么名,以后呢给我养成这个习惯,为什么?因为后期呢,你们开发在软件公司开发的时候,所有的东西都是写成什么service什么到的这种方式的。所以呢,大家要注意这个事啊,来这边叫叫什么到啊啊看到吧,好finish行了,排下队吧,把它打开,谁的头啊他是吧。他是啊,他去调什么service service完成业务逻辑处理,调什么到告返馈给谁service service反馈给谁service service拿到这个结果再调什么视图层完成页面展示,明白什么意思啊好,那么这个是什么到呢?来解释一下啊到解释一下,呃,到。是被exercise。
37:06
Object啊,是数据访问对象。和什么无关,和业务逻辑没有任何关系啊,没有任何关系,不能有业务代码,明白吧,不能有业务代码,只完成什么,只完成CD操作。倒层的方法名啊,倒层的方法名一般都是什么?Insert叉叉叉。Delete。查查他,Update叉叉它。Select明白我意思吧,啊就只能这样去定义好,那么大家想一想这边怎么写这个这个程序。
38:04
啊,我们要分析的话,这个道里边提供几个方法呀。这个还得打开谁看呀,打开一吧,这个一里边好像我们写了一个类啊,这个类叫什么select吧,你看这个select里面是不是写了一个select,这不明显是查询账户吧,又写了个方法叫什么啊啊,所以我决定了给提供几个方法,两个一个方法是什么?查询返回什么信息,是不是账户信息,所以这个时候我们还得需要加一个什么。加一个包吧,加什么B,是不是这个B呢?起个名啊,叫什么account吧,Account有几个属性,来这边我加上三个的方法。全部选中OK好了,那这样的话,咱们继续这边怎么办啊这个。
39:07
叫select吧,拍什么number吧,参数跟什么参数。是不是这个参数啊,啊行就是这样,这个方法就提供完了啊写然注释啊显然注释public,这是一个通过什么账号查询什么账户信息,这是什么呀,账号吧,这是返回什么账户信息吧,账户啊信息。嗯,有这么一个方法返回,那么先行吧,好,这个方法是不是自然有人会写啊,记住我问你啊,这个跟业务有关系吗。这个跟业务没有关系啊。接下来还得有个方法,是不是专门完成更新的,所以这个时候呢,返回in类型啊叫update吧,所以跟一个account吧,是不是这个就行了,嗯,来,那这样的话,咱们返回个一吧先,这个方法主要完成什么,这是什么更新账户信息吧,更新账户信息好我说一下啊,Mac呢不好用。
40:20
不好理解,原因很简单啊,因为大家不知道该往道里边写什么方法。你就算知道写什么方法,你搞不清参数,就算搞清楚参数,你可能搞不清返回值。反正各种障碍了啊,第一次写肯定会感觉很别扭,因为在瞬间之内呢,一天的时间我们增加了N多个类。分N多个方法啊,这种可能会感觉不太适应,你得适应一下啊,来咱们service这边怎么办,Service就是完成什么,有一个什么业务。转账业务对吧,所以这个方法我决定起名啊,转账会返回一个in的类型,一个会返回一个负一呀,返回二呀,返回什么呀,其他的值对不对,所以我决定返回in类型叫transfer转账,Transfer就是转账意思啊,转账的话应该是从这个账户里边转,转账什么,这个账户里边吧,转什么这么多钱吧。
41:18
所以大家看这个方法的参数也是很重要的。明白我意思吧,好,这边呢,返回这边,我写上这是一个什么方法呀,转账方法吧,嗯,这又写完了,我问你是不是有有一个人专门去写这个方法。有个人专门去写道吗?那这样的话so出来能写了吗?这个。现在是不是能写了?怎么写任务很简单,我写上步骤了啊,这个控制器的任务就是第一步接收什么数据的什么输入,接下来就是调用什么,调用model。完成业务处理,调用什么view,完成什么页面展示吧,所以大家看他就只做这么几件事,这个地方就是直接调request,一些方法,会拿到这个from come number对不对,会拿到什么to,什么account number对不对?所以拿到什么money吧,来这个怎么拿request.guide parameter叫什么?
42:20
From account number拿过来,这样的话,我们把这个东西从这给它复制一下,然后我给它放到这儿,放到这,然后这个我就叫做to,这个我就叫做money,好了,这边我就写上什么叫double.past double写上,把后边减了,咱放进去转换成double类型,这个时候你想你什么事都不用管,直接调调service吧,你调model,怎么调model啊,你要想调这个方法,注意啊,这个必须是成员方法,要想调的话,先调对象,怎么调对象?是这个吧,叫account什么service吧,New一个什么account service吧,News new的时候呢,New完了,接下来你是不是会调用这个service的方法,这个service里边有一个方法是专门转账的,你啥也不用做,你有秘书了,你还要做什么呀?是吧,你调service就转了,这个时候转账,它自然会返回一个结果吧,叫什么结果,是不是transfer result呀,那这样拿到这个结果之后,你就判断了,如果这个什么transfer,什么result啊,它要是等于等于负一的话怎么办?什么else if对吧?嗯,如果什么transfer,什么result啊,它要是等于等于什么二的时候怎么办?什么else是吧,那其他情况怎么办?
43:39
最大能看懂啊,那这样的话,你想一想视图层是不是还没有画,所以这个时候的话,你在视图层需要准备几个界面,你最起码需要准备三个界面啊,这个界面是不是以后也能复用了,所以这个时候写上啊一个叫什么叫transfer,叫success,再来一个JP。
44:00
这个叫transfer。叫error啊,杠1.dab,然后呢,我再来一个啊,这边呢,我再写一个叫transfer啊,什么errorra啊,什么杠2.d行吧,那这样的话呢,这边我就简单写一下啊,那成功的话我就写上吧啊这边呢,我就简单写视图层headding coding写上简单是这么一回事啊,GD18030我都抽出来来这边呢我写上h now来写上头写上title啊叫转账的结果,叫转账结果,这边写上body,然后呢,这边写上去一个he标记,加上online,加上一个center啊加上center之后,这边加上一个放字体,好这边加一个color,然后呢,这边写上去一个green绿色吧,转down行吧,把这个复制一下,直接放到这吧,这边呢,我就写上什么转账失败吧,转账失败啊转账失败好,那我问你这边转账失败的话应该。
45:05
纸红色转账失败吧,余额不足吧,余额不足好了,把这个复制一下,是不是放到这啊,这样的话转账失败,这是什么?未知原因啊,未知原因啊,未知原因好了,那就写完了,大家想这个视图是不是就完成了,那你这边怎么办呀,你写完之后你这个怎么办?response.send吧,Readdirect重镜像到哪啊,request.get contest,什么past,把拿到加上什么杠啊,叫transfer,什么I-1.jb吧,这样的话把这个复制一下放到这,放到这这个的话就是啥呀,这个就是那个叫什么那个success是吧,来,我写个success啊,把这个也写个success,把这个删掉啊,写成什么success,你这边就给它改成。这就完了,你看整个这个这个这个这个指挥官就不做事了,他就只接收数据,把这个事儿真正做的时候交给谁model model把这个事儿处理完之后,他根据这个结果来跳,一面跳到这,跳到这,跳到这,它是调用两个东西,一个是调model,一个调什么view,那这就是Mac啊,这是M,这是V吗?这就是C吗?
46:20
所以你看接下来你想一想是不是写业务代码,你这个业务怎么办,怎么写。超简单,你做得到吗?你需要道是吧,所以得扭道吧,叫道道,你扭道吧,好把这个道尿出来,接下来怎么办?嗯,这个业务怎么办?是不是有账号就能查查余额怎么查,有一个方法叫select,是不是可以把这个账号传进去,就可以返回一个账户了,这个账户是个对象,叫account吧,叫from account吧,好,那这样拿到了,拿到这个账户怎么办?判断账户的余额吧,哎,这个账户里面不是有个方法吗?叫什么方法呀?Get balance吗?是不是余额如果大于什么大于等于多少money?如果它大于等于money能转不能,可以转吗?Else就怎么办?委称什么负一是这意思吧,是不是特负一啊?
47:21
或者你在这准备个什么?准备一个int类型叫十什么吧,等于零了,那怎么办啊,这种情况咱们给给这个变量赋个什么值就行了,这个变量负一个负一呗,最后把谁返回,最后是不是肯定要把它返回的啊,行了,就这么做啊,如果它大于等于它就能转。是吧,就能转,或者我可以写的更简单一些啊。那这个删了吧,删了吧,啊这边怎么办?如果它是小于它的话,我直接返回谁负一还咱们就不用写了,这个先返回一吧,啊先。你看啊,我拿到到拿到之后呢,我调用这个到里面方法查询账户,如果账户的余额小于这个money的话,我就返回负一程序,如果能执行到我光标的这个位置,这说明什么?
48:11
这说明是不是可以转啊,可以转那就转吧,怎么转,先设先设置我们这个账户啊呃,他的余额设置这个账户的余额怎么设置啊,点set balance,它的余额等于什么,它的get balance减去什么money是吧?这大家能理解吗?来把这个账户库账户再查出来啊错,我看看吧,怎么查,这不跟你一样啊,直播查的账号是哪个账号啊。是不是to啊啊to拿过来这个to的话,是不是也可以修改余额balance,它的余额等于什么?等于to的get balance加什么Mar吧?好,我问你程序到此结束,是不是就相当于把Java虚拟机内存中的Java对象的余额改了,数据库里边改了吗?没有要改字库怎么办?要到的方法叫什么update吧,点update更新什么from count,再更新哪个to account吧,嗯,好,整个业务就算完了,这边呢,加一个什么返回什么count,加的返回什么啊。
49:22
这就是业务。是不是业务啊。这是什么呀,这个根据账号查询什么。转出账户信息吧,叫转出账户信息,而这个呢,是根据账号查询,什么叫转入吧,转入账号账户信息,好,我问你这是判断什么,判断转出账户的余额是否充足吧,余额是否充足充足啊。
50:02
如果不充足返回负一程序能听到这,这说明什么余额,什么余额充足开始什么转账啊,充足开始转账吧,开始转账,但是呢,你要记住啊,下面两句话什么意思?下面的两行代码啊,下面的两行代码表示将Java虚拟机中的Java对象。The balance属性修改了。但是数据库。中的数据定位什么?修改吧,接下来执行完这两行之后,在这才是真正的干什么?更新数据库中的数据吧,大家看这个步骤还是比较清晰的。你所有的东西不用连数据库了,因为你也有秘书了,是不是这个。就是这个抗到了,你只要调到他就会给你数据,你只要调到他就会给你数据,拿到判断余额,余额充足就转账,转账你先修改内存,把内存里的对象都改了之后,你赛的方法是不是修改它的余额,修改完余额之后,你是不是就可以更新数据库了,但是我问你现在有事务吗?
51:14
现在事物是不是没有得到控制啊?所以先不用管事物啊。我们先讲Mac这个控制器,只要拿出去调model处理调视图层,完成页面展示,而service只关心业务,其他事不关心,而到只关心数据的增删改查他不关心其他业务。你现在只要写这个方法就行了,这个方法就是这第意吧,来connection connection于now吗?接下来prepare的什么statement啊,等于什么,那接下来么叫在吗,等于什么那吧,你这都写这个就行了,等于now来接下来继续这边写上写上什么呀,Connection么等于CTO点盖什么connection好,这边加一个TRY开。这边加个TRY啊,来加上try catch,然后加上去一个finally啊,这边我再加上去写上did,点什么close吧,好,这边都给它关了,然后这边写什么就行了,不用关键业务select星叫select什么,然看number啊,或者是直接balance吧,直接balance啊,然后from t account吧,Where条件是什么?这number等于问号吧,那这样就行了,那么接下来是等于connect prepare编译来我们把它编译一下,然后就可以在这直接给问号赋值了,S string给它附一个值叫什么啊,看number吧,附上值之后我们就可以查询返问结果集对吧?返问结果集判断如果结果集中有数据怎么办?结果集中有数据,人家最后要的对象是个账户对象啊,所以这个时候呢,你就要封装了吧,哎,反呐,接下来你在这怎么办啊,就给它拗出来吧,用account啊,用完之后呢,你一定要调用这个account里面方法set什么,它的account number等于这个什么。
52:55
在余额吧下balance啊,都给它设置上余额,这个余额的话就从结果集里边拿就行了,RS点盖的什么嘎啊拿过来放到这就可以了。
53:05
这样的话,最终把谁返回,把这个。这就是一个方法。这个方法只做查询,这个方法是不是只做修改啊,那我复制了行了,这个我就不再写了啊,太费劲了,来怎么办?这个是不是可以删掉结果集这个账户是不是不用了,这边S1句删掉删掉,这都删掉啊,这个用不上,接下来这个呢,咱们就给它返回一个int类型,所以返回count吧,所以接下来是不是在准备一个count呀,等于零是不是返回接下这个结果题没有返回写个down吧,这边怎么写啊,是不是个搜索语句,就是更新吧,更新什么啊?T account这张表叫set balance等于问号外条件啊。com number等于问号,编译吧,它编一下,把它编译,编译之后呢,赋值第一个set吧,给第一个赋什么值啊。第一个问号负什么值?你这个账户对象是不是可以调方法调一个get balance是不是就是余额掉3X正给第二个问号赋值,第二问是谁啊?就是它get a com number,这样的话你想一想是不是就把这个问号和这个问号都附上值了,附上值之后就执行更新,怎么执行更新,就是点什么excuse吧,Update就行了,这就完了。
54:15
整个程序就算写完了。你想你现在在这是不是传了一个,传了一个账户对象,你账户对象余额改了吗。是不是改了,是不是传进去了,那我问你这个对象传进去之后呢,在底层会执行这个阿贝啊,这个阿贝的语句,会不会把这个余额改一改。因为你会调这个账户的get balance吗?你因为在上面是不是balance吗。所以在这边我带的balance这个值是不是就是新的值,我给它附上去是不是改了,那就这样就行了。所以呢,这个程序呢,就是这样去写,你看MVC加上去之后呢,完全跟这个代码就不一样了。差很多。
55:01
最起码我又加了三个类。加了上三个直线的一面。做一个职能分工,这样吧,我加个断点来测一下啊,我以谁为核心呢?以核心控制器为核心,加上断点,然后接下来我先把数据恢复一下,这个数据的话,我确保啊还是多少啊,五万一万好了,数据恢复之后,我开始把这个项目部署一下,走添加走走bank OK,好了,这边把服务器启动,启动服务器,服务器启动好没有问题,给它清空,接下来打开浏览器,我们要访问这个bank项目,所以这个时候呢,我们访问就行了,来这边我写上B。点了啊走。点了啊走。这边大家看看是不是过来了,往下走往下走往下走,大家看一个叫一二转多少钱1万,好继续往下的掉不掉service,掉service是不是进去啊,怎么进去点哪个。
56:03
是不是这个就进去了,这是service吧,好,进去大家看是不是调到service上面了,调到service是把道创建出来了,要不要调到啊,它是不是调到啊叫倒那进去吧,是点这个吧,进去看看这个方法啊来点进去大家看倒直行,那他会查询查询返回返回返回返回返回返回返走走走走走是不是关闭,是不是返回就行了,返回到哪了,到返回给谁。Service service这边拿到之后往下走,你看看这个from account对不对啊,大家看清楚这个from account是不是这个账户,这个账户往下走账号多少。余额多少5万对吧,那这样的话再往下走,大家想一想,是不是又执行到了,又执行到你再往下走我就不再进去了啊来往下走这个兔账号呢,账户你可以看一看,兔账户这边他的账号是多少啊,二余额多少啊,1万吧,那么接下来大家看一看这个条件满足不满足,不满足是不是就执行下面这个了,所以往下走就走到这儿了,那么接下来大家看一个是五万一个是1万嘛,但是你看改完改完往下走,你再好好看一看,Java虚拟机里边改没改,这个账户它的余额变成多少了,4万了,下面这个账户它的余额变多少了,2万了是吧?但是我们的数据库变了吗?数据库没有变,现在是不是再继续往下走,走到这个道里边啊,那你就进去吧,是吧,那这个就更新了啊,我就不再进去了啊,更新是不是更新一个账户数据库更新了,我再更新是不是数据库更新了,那这个count值是不是等于二啊,你看等于二吧,那就返回了,返回是不是到到到控制器这了,拿到这个程序之后,大家看往。
57:46
再走,是不是这个条件成立了,你就走这就行了,Success了,成功了,嗯,转账成功了。能理解吧,这就是MVC啊,没什么难的,其实你多写几遍也就这回事了,就无非就是分工了呗,以前写到一个类里边,现在不写到一个类里边了,分开类去写了啊,咱们调service,这service又又又又又掉到了吧,这样好,我来我这样啊,我我我改一改啊,不能这么写,大家看啊,我在这个service里边有没有可能有多个方法。
58:17
除了这个方法之外,有没有可能还有其他方法呀,在这个方法要不要用用这个道啊,那既然用我把这个灶提到什么呀,我为了节省内存啊,所以提到外边行啊,提到这这个是单立的吗。或者说我我一会我一会再说这个啊,我能不能把踢出来。我在service里面不有service吗?也提到这行吗?好,我的所有都提出来了,这是单立的吗?是单立的吗?那我问你这个成员变量是单立的吗?成员变量是不是对象相关的成员变量也是什么单立吧?啊,也是单立的,那我问你啊,这个service是单立的,那你service里边这个杠呢,这是成员变量吗?这是不是纯外变量啊,成现变量也是单立的吧?啊,成员变量啊,也是单立的。
59:13
啊,这个也是单例。就一个嘛,因为这个S量只有几个一个,这个只有一个的话,你想这个对象只有一个的话,你这成本变量只有几个呀,一个吧,都是单立的,但是他们会有现场安全问题吗?不会啊,不会有现场安全问题啊,虽然是在多线程环境下运行的单实例啊单实例,但是啊这些对象的内存会被修改吗?不会被修改吧,你修改过这个对象的内存吗?你是不是只是调用这个对象里面的方法,这个方这个对象里面有成员变量吗。没有啊,这是不是没有成员变量啊,这个道里边是不是没有什么变量,是不是只是调方法啊,所以不会有现场安全问题啊,运行,但是但是这些对象内存不会被修改,所以没有线程。
60:10
安全问题啊,没有现成安全问题,所以大家大胆用就行了啊,这个是不是也是一样啊,这个也一样。能理解这意思吧,好,我再来试试这个程序改完之后能不能再运行啊,来点它点它点它部署,OK,把服务器启动,启动之后呢,这边后退啊,然后我刷新之后我点转账,来这个转账。成功了吧,这边呢,应该变变成多少了这个钱。刚才转过一回了。这钱应该是变成三三了吧,这边再后退啊,再转账变成多少啊,二三是吧,22222224啊来再来幺五吧,再来。零六呗,零六啊好,接下来再转一次。转。
61:00
啊是吧,不行不行啊,转不了了,这样的话咱们这个功能就完成了,但是我说啊,这个Mac不是最终版本啊,现在就先写到这,大家可以先休息一下啊,一会儿再继续。
我来说两句