00:01
好了,咱们继续啊。上节课呢,咱们主要是说了一下这个Mac架构模式啊,怎么去分分层啊。横向分和纵向分,要知道这个事儿啊,什么表示层,业务层,持久层。我们横向分Mac啊,Model view和控制器啊,这个程序是怎么一步步走的啊,接下来我们对这个程序进行一步的提升啊,进一步提升。呃,这块看一看啊,加了几个类,我们接下来还要加啊。使用MC架构优点啊,职能分工耦合度低,高内聚低耦合,为了提高扩展率,提高组件的可重用性啊。好,咱们来看一看,呃,这边呢,我就再建个项目吧,啊,再建个外面项目。然后呢,起名叫mvc bank3吧,啊好了,这边呢,我还是杠B吧行吧,好,我还是选中它好好了。
01:12
注意啊,这边呢,我就把这个该删的删一删,它删掉,嗯。这边呢,这个里边的这个不用改是吧。不用改,但是我这个文件就不要了啊,删掉我一会复制吧啊。嗯,我看看还有什么。行吧,从这复制啊,复制我相关的一些东西,这个和这个还是复制过来放到这。然后呢,这个炸包呢。我还复制一下放到我来放到这啊,然后呢,这个插面文件呢,我还是复制一下,然后呢,直接放到web INF下。嗯,然后这个JD呢,嗯,该复制的还是复制一下啊,放到我们这个叫web下边。行吧。
02:01
嗯,工具类是吧。布置一下过来。还有一个就是这个什么so that,我复制一下换过来啊,剩下的就不再复制好。这边呢,我打开它啊。好,这边我删掉。啊,这个注释就删掉了啊。这报错了吧,是不是没有service啊,嗯,这报错就报错吧,先不用管它来这边呢,这个我就来把它删掉吧,啊关联关系给它删掉吧,好这个二呢,我就我就开着吧,二我这个类里边的相关东西我还要用啊。好,这边呢。我要改了啊,这个大家能看明白吗?这个现在这个程序首先你看啊,数据库可以在什么呀,再重新的恢复一下啊,还是那个五万一万,接下来再继续啊,比如说这个定B文件啊,这删掉MVC架构啊。
03:08
呃,或者是VC model啊和我们什么呀,C啊是叫controller了,V指的是view啊,MVC,那么接下来呢,我要在这呢。写点东西。这样吧,别这么写了啊。直接写了这个可能更容易理解一些,That,它会掉什么?Service是吧,Service啊,Service会叫谁呀?叫到吧,啊好,这是。纵向分表示层这是什么层?业务层这是什么层,19层,那么层与层之间应该有接口。
04:00
啊。应不应该有接口?我们看这个和service啊之间是怎么调的。我们就看上面这项目吧,打开哪个service这个吧,这是service吧,这是到了,好大家分析一下这三个类啊。Serve里边有没有new这个对象?那我问你啊,是不是就意味着如果这个类名。发生了改动。你这个类是不是就受到影响了,或者说你这个类呢,你这样做不好扩展,为什么呀,因为你Java程序啊,你已经写成那样了,你关联的类是这个类了,将来可能呢?呃,另外有一个人也写了一个service,那个service性能高。这是张三写的,写的发现它性能很低。
05:00
后来呢,李四啊,又写了这样一个类。只不过类名跟这个类名不一样。明白吧,那这样的话,他们这个类呢,性能相当高,那这样的话大家想想,那另外写那个人那个类是不是组装不上去啊,为什么,因为这是是写死的呀。是吧,你最起码这边的话,你想一想你下边这些方法的调用。你掉的是这个类里的方法是吧。那我觉得应该啊,应该是调接口里的方法。你想这个service如果是个接口的话,下边调的所有方法都是面向什么接口编程的,你没有面向具体的类型。是这意思吧,所以中间你想这个调service的时候,甚至我们这个service再去调什么倒的时候。都应该面向接口去调,所以呢,我们这是一个层,这是一个service层,这是造层这一层,这一层之间有个接口。啊,然后这一层和这层之间有个接口吧,所以需要再提供两个接口吧,你看好了啊,这是A层,这是B层,这是C层,A和B衔接的时候用斜口衔接,B和C衔接的时候呢,我们用接口衔接,A和B耦合度降低,现在我们这个程度,A和B是不是耦合度比较高一些,把耦合降下来,怎么降耦合只能用接口编成中间是一个接口的,中间这是个接口的,BA不用关心C吧,C也不用关心BA不用关心B吧,B也不用关心A,关心A关心什么接口,BB关心什么呀接口。
06:30
B关系什么呀,接口吧这C关系什么呀,接口吧,全是一套接口下来,那这样的话,大家想想应该是定义什么呀,怎么去定义接口啊。嗯。定一个service接口吧。因为你这调方法不是调的service怎么样的方法吗?来还真调调到的方法吗?是不是在定个倒接口啊,行了啊加了啊又要加东西了,这个接口是什么接口啊。Service interface这是什么接口了?到interface行这个图呢,我就这么画一下,接下来我就来开始了啊。
07:08
嗯,怎么做呢,这个建包了啊,看清楚这个包我建的时候啊,是这么建的,我建一个什么包,Service包,然后我再建一个包什么包啊实践包。你有接口就应该有实现类对吧,来我再继续啊,我得建个什么包啊,倒包倒包建完之后得倒倒什么倒实线吧。这能看明白吗?好,那么接下来service里边你决定给他一个接口是吧。我就加加了啊。哎,加接口,这个接口咱们起名叫什么account service。
08:03
OK。是吧,这个接口呢。Account到了。好。这都是接口吗?能理解吧,接下来实现类吗?是实现类吗?叫account service,什么IL,注意啊,在公司的开发规范都是加这个东西。四个字母啊,叫实现这个实现哪个接口。明白吧,OK啊,这个实线呢。叫account到什么IL吗?嗯,实现哪个接口啊。这个OK啊,Finish,好,又加了两个接口,等于式。
09:00
一个接口是大接口,一个是接口是service接口,大家看啊这个程序呢,捋一捋哪是这个吧。这个面向谁去边长,需要关键这个实线吗。面向service吧,但是这个接口吧,它一定是调到接口里面的方法。看这三个啊,一个两个三个,他最终要和他交互,但是呢,他不用关心他,他只要关心这个接口就行了,再继续,比如说这个这个service会掉道吗?他最终和谁交互啊。是不是和它交互啊,但是你要注意它不用关心他吧,是不是service只要关心什么就行了,到接口吧,这能看懂吗?就是说原先是没有这个这个这个的,原先没有这个吧,好,你看这剩下几个类。Service调什么?Service service调什么?调到了原先是不是这么写的,中间无,现在无非就是干什么了。
10:02
加俩接口就是ABC,原先就是孤立的三个类,现在A和B中间加个类,B和C中间加个加个接口,这都是接口了,加了俩接口,A面向接口了,B面向接口了。跟时间链没有关系啊,所以这个时候呢,大家想接口里面定什么方法,那你这个接口里面定什么方法。转账方法吧,那叫transfer呗,什么呀,叫from account number吧,叫还有什么to,那个account number吧,还有一个什么什么money吧,啊就这样就定义完了,这个方法就完了,这就是service啊,转账方法。好,那么接下来这个道里边呢。道里边无非就是记两个方法吧,一个什么account叫select by,什么account number吧,啊,写个什么number吧,好,就是这个,接下来这个写上。不这个这个这个忘了复制那个B是吧。
11:01
这个B是不是没拿过来翻过来啊,不放过来B的话会有问题,因为这有B吗?好继续还有一个方法吧,反馈什么in型叫update,叫account是吧,New account就行了啊,这个方法是更新账户,好,那这样的话你想一想,这个接口都定义完了,你实现类是不是肯定会报错。这是不是实现列报错了啊,加上。实现方法。对吧,然后这个呢。是不是也是实现啊,嗯,实现好了,那这样的话,这个类这几个就不报错了啊service实现咱们可以从哪考。第二个版本里边有个service嘛,这个service里面不是有个方法叫transfer吗?是不是可以从这拷过去,我就不再写了啊,考的时候会出错。因为这需要一个道,这里边是不是没有道是吧?好,先考过来再说啊,接下来这个里边有一个道的实现,道的实现不是有两个方法吗?接下来这边不是有个道吗。
12:14
啊,这个到就是你看这不原先写第二个版本吗?啊,这是到的实现啊到吗?接下来这里边不是有两个方法吗?一个这个吧,啊复制一下啊,先放过来,哪个这个是吧,先放过来啊这是查询再继续吧,下面是不是还有这么一个方法呀,复制一下我就不写了啊啊你理解我的意思就行。就是无非就是加俩接口也没什么难度啊,好了,那这样的话,这个版本就没有用了,我给它关了啊。我们该复制的都复制完了,大家分析一下现在service调的是什么接口?Service service接口下面有时间内叫service吧,Service时间内叫做does接口吗?到接口下边到的时间内吧,好,你排下队,你看看啊,原先的时候我们是不是没有这个接口,没有这个接口是不是就是A类B类和C类,现在呢,A和B中间加了一个接口,是service接口,B和C之间加了接口是倒接口了,好那么大家看这个能看明白是吧?还是它去调它啊,他调他,然后他返回给他,然后他返回给他,只不过中间层与层之间加了一个接口,加了个接口啊好呃,这个接口呢,方法已经定义完了,所以这个threat不能逆向它了。
13:27
你so,在编程的时候,这个位置只能现在暂时拗一个什么。六个实现吧,那这个时候下面调的方法是这个类里面的方法,还是这个接口里的方法。这个方法运运行期掉的当然是大,但是编译阶段这个方法看的是什么,是接口里面的方法吧,所以这样的耦合度要低一些了,注意啊,你现在彻底结耦合了吗?没有,你是不是还是在用着这么一个具体的类型,以后这会用工厂代替。工厂模式去创建对象。
14:01
明白吧,现在咱们最起码解决一个问题了,下面方法看的不是你的了,下面方法看的是接口里边的。就先解决这么一个问题啊,后边这个实际上还没有完全结耦合,要是真正完全结耦合,你还写这个类名干嘛呀,你写个类名是不是又偶合都上去了,所以到时候咱们会解决啊,现在的话最起码解决了一个问题,你下面掉的这个方法跟这个类没关系,你调的是接口里边。这是个接口,这是多态了,这是不是多态啊这个。多肽嘛,这个是。多肽啊,来。这个删掉这个没有用了啊,这都删了。不太好,那这样的话,接下来这是service接口就有用了,Service实现你这一个类实现这个接口嘛,这实现接口里面所有的方法吧,然后你就一个方法叫transfer,你想这是不是到啊,那这到怎么写啊,是叫account到吧,Account到吧,New一个account到什么实现吗?这是不是还是多肽啊,这是多肽吧,多肽你下面调的方法,我问你,你调的是这个类别呢,不是你下面调的方法,是不是接口里面的方法呀。
15:11
能理解我意思吧,嗯,这就完美了,成功了。干了,嗯,这呢。没问题。就就就加俩接口吧,啊,加俩接口。下来之后加一下啊,直接写这个版本,上面两个就别写了。这个版本还有问题吧?哪的问题事物没有?是不是没加15啊,没加15啊。呃,咱们来看一看这个东西能不能运行啊,这边呢,我给它部署一下来添加走走bank啊,OKOK,把服务器启动。启动之后呢,咱们再来访问一下啊。
16:01
来打开它。有五万一万是吧,五万一万的应该是四万两万。三万三万吧。两万四啊。一万五万零六万是吧,发错了。是这意思吧,啊,就是转账是可以的啊,没有问题的,这已经报错了,现在这个不用管它了啊,这个是没有问题的,程序呢,我说一下跟第二个没什么区别啊,无非就是加了两个包,这两个包里面加了两个接口,我们以后要面向接口编程,不要面向具体了,所以这边呢,层与层之间要衔接的,采用耦合度要低一些啊,就是这个意思。这边了,但是我强调一下,这个是还是没有完全结耦合啊,下面的程序啊,已经面向什么了,接口调用方法了吧,啊调用方法了,但是还是啊没有完全解耦合啊,没有完全解耦合解这个解啊,解开的解没有完全结合。
17:10
是不是直接直接就对象了,直接啊直接你对象了啊,以后呢,我们学spring的时候会交给spring去管理啊,直接你对象。啊,这个就就就这么一个小小的缺点啊。这边是没问题的,往下调的方法都是这个里面的方法,跟这个没有关系了,以后我们只要把它写到配置文件里面是不是就可以了。你想把这个类名配到配置文件里面,这个类名能改吗?Java程序不能改,因为Java程序将来是个可能是class文件,能改吗?不能改,但是你这个类名写到配置文件中,将来是不是通过配置文件去创建对象啊,那这样的话,将来把这个配置文件的名字一改,你想一想这个类关联的这个类是不是就不是这个类了,是另外一个类了吧,这就是装配吗?装备更加灵活,能不能理解啊,就是工厂你们学过的,以前是吧,第一阶段你可能提过的工厂模式创建,嗯,不要关心对项的具体创建细节,这样的话你这个类会很累的,为什么?因为不能扩展了,因为你写上它就是它了,你将来把它写到配置文件中,这样更好啊。
18:15
是吧?配置文件一改类,自然就装配成功了,你比如说有个A,有一个BA,有一个CA和B能装配,A和C能装配,那到底A和B装配还是和C装配,那完全取决于配置文件,你在配置文件里面写个B,那A和B就建立联系了,你在配置文件写个C,那A和C就建立联系了。能理解意思吧,所以这是一个动态的过程啊,所以这边呢,先你知道有这么一个缺点就行了啊,这个缺点咱们现在的话不解决,我们到最后的时候才会解决啊,倒数第几天,第二天的时候才会解决这个问题啊。这个用工厂,呃,行了,咱们今天上午的话也就不再往下讲了啊,也就不再往下讲了,呃,我这边呢,我发现我掉了个知识点啊,到时候我补上去过滤器的实现原理,还有一个东西就是那个过滤器没讲完。
19:01
有一个东西叫什么叫。叫过滤规则啊,我掉了这边我我看到有这么一个文档啊,所以我想起来这个质点没讲,咱们抽时间吧啊,讲一下这个东西叫过滤器的过滤规则啊,大家记得提醒我啊,如果忘了的话,你再提醒一遍啊。掉了,咱们讲过滤器那天应该把这讲了,结果没讲行了,咱们今天上午就不再往上讲了啊,大家呢,要把这个第三个版本写上七八遍吧,啊写上七八遍,写完再删,写完再删建包明白吧,主要是把包建好了,把包名给我起好,不能随便来类名给我起好,不能随便来接口名给我起好了,明白这意思吧,你就写上了七八遍十来遍呢啊,写完就删,写完就删,嗯,多写几遍。我什么意思呢,就是说希望。
我来说两句