00:00
那么各位同学,我们接着上一节课讲的内容呢,继续为大家讲解,上一节课呢,我们已经完成到了这个地方,OK,打开我们的代码,诶,打开我们的代码,上次课呢,我们完成到这个位置了,那柜子就是登录这块,登录这块。我们完成这块了。完到这能够完成登录并提示相应的信息,那从我们分析这个图来说呢,就相当于说这个用户啊,用户他可以跟服务器进行一个交互。然后呢,我们在这个服务器这块呢,呃,它这个地方也会携程啊,根据你发的不同类型的消息,我用不同的方法来进行处理,这是我们上次课写的代码,写代码,那现在呢,我们来接着往下走啊,接着往下走,那下一个功能呢,我们来思考一个新的问题,我们来思考一个新的问题,什么问题呢,同学们可以看到,同学们可以看到,就说现在我们要去想一个程序结构的改进。
01:08
前面的程序,也就是说我们前面呢,完成了一个这个固定登录,就是叫指定用户名和密码的这种登录,但是呢,它没有结构,它目前是没有这个结构的,什么叫没有结构呢?就说你现在代码你打开看一看你的服务器端。你的服务器端,说白了你是采取一个流水账的形式,你把所有的代码,你把所有的代码,比如说像read package,还有right package,还有我们的这个登录的处理,还有process,包括这个server process message,我们是固定写在了一个文件里边,大家想一想,如果我们这种模式。不停的往下写,那后面的功能你就基本上写不动了,因为你把所有的事情都放在一个文件里面去,这个叫做程序没有结构,就程序没有结构就指的这个意思。
02:09
啊,它的结构是没有的,那如果说对一个没有没有结构的这种相对来说呢,你写到后边再加一点功能,基本上加不进去,甚至可读性很差。你也不可能让所有代码让一个人去写,因此呢,系统的可读性,还有扩展性,还有维护性呢,都比较差,因此我们需要对程序的结构进行一个改进,那改进涉及到两个问题。就说我们如果以前我们写的是BS开发,那BS开发的话呢,因为浏览器这一块呢,同学们是不需要自己写的。如果我们前面写的像这个客户关系管理系统,它是单机版,它单机版的话呢,其实不涉及到服务器,所以说如果是BS,你的客户端不用写,如果你是单机版呢,你没有服务器,所以你只写个客户端,所以你只写一头就可以了。但是现在我们的结构是CS的结构,我们既有客户端又有服务器端,因此呢,我们的改进涉及到两方面,也就是说你只要是写到我们这种CS结构,你只要一个功能,你完成一个功能,你要写两头。
03:20
你既要写服务器端,又要写客户端,所以你想你的这个代码的这个就说工作量呢,无形中就比像这个BS要要要怎么样呢?要要增加一倍,但增加一倍,你看起来是增加了一倍,对不对,但实际上它的复杂度呢,肯定要要更多,因为它是网络传递,你测试起来呢,还有时候还比较麻烦,因此呢,我们这样子说啊,我们首先呢画出框架图,然后呢,根据我们的这个框架途径改进,我们先改哪一块,我们先改进服务器端,然后再修改勾端,咱们有个步骤,你最好不要两头同时写,两头同时写呢,这个有时也比较明确,好了,这是老师的一个思路的分析,那既然有思路分析呢,我们先把这个程序结构图画出来,然后我们开始开始动手。
04:09
啊,开始动手,这是一个很好的一种,呃,一种思想啊,就是把一个大的东西化成一个小的东西。就是所有我们去做一件,呃,就是比较复杂的一个功能的时候,一个核心的一种思想,好了同学们,那我们现在来开始把这个板书,然后画出我们的示意图,跟上思路。好,我们首先呢来说一下,现在我们要完成的事情,是如此这般的。怎样子的呢?好,现在呢,程序的这个结构不够好,对程序的结构不够好,因此呢,我们涉及到一个改进的问题,对不对,没有结构吗?你没有结构你后面怎么办呢?功每加一个功能,你都加一个函数不现实对吧?那么我们分步骤来走啊,我们分步骤来走。那么我们现在呢,第一步我们完成第一个事情,先改进。
05:05
哎,我们先先改进,改进哪边呢?改进服务器端,服务器端。对不对,先把服务器端改进来,然后呢,我们这地方先,我们我们先画出画出这个程序的程序的一个框架图。呃,然后再写代码对不对,然后我们再写代码,再写代码。对,再写代码好,那首先呢,我们把这个程序的框架图给同学们玩一把啊,我们来分析一下,然后来开始动手。好的,呃,那么我们来开始画一下它的示意图,哎,看画一下它的示意图,OK,好,我们来走一下这个代码。呃,画出这个示意图呢,我们先画这边服务器端的就是服务器聊天室的聊天室的服务器,服务器端的什么呢?这个程序程序的框架改进图,改进图好我们把它这个做一做啊,我们把它做一做。
06:14
那么怎么改进呢?我们来画一下这个示意图这边的代码同学们。我先画一个这个框框。整个这个框框呢,代表我们的服务器端,这个代表我们的服务器端。服务器服务器端,那服务器端呢,我们现在目前已经有的一个文件叫主函数啊,就是啊主文件放这啊同学们跟上思路,这是我的一个主文件,现在呢是已经有的,就现在已经有了一个命点构,这个是大家呃已已经看到的啊闷点构,那么这个梦点构呢,同学们可以看到我们写的是这个样子的,它这里面呢,它完成了哪些功能呢?你看他完成了一个监听和接收客户端连接的一个功能,然后呢,它起了一个携程。
07:06
那一般来讲哈,这个携程起来过后呢,按理说就跟这个命点购没有什么关系了,因为你看这个process做完了过后,你就去让他去处理这个这个这个呃消息了,所以说我想这么去设计他呢,只做一件事情。他呢只做一件事情,他做什么事情呢?诶,他在这里监听我们的程序,监听第二点呢,获取获取注意听讲啊,这边好多任务呢啊获取什么呢?获取客户端的获获取的这个等待啊,这样监听和等待等待。等待什么呢?等待客户端的连接,这是第二件事情,那么还有什么事情他可以做呢?诶他还可以去完成一些初始化的任务,因为你后边我们今天呢,还会写这个用red的连接词做一些工作,那这个时候他有些初始化的工作呢,可以让这个主函数帮我们来来完成,所以说他还完成一些初始化的工作。
08:11
初始化的工作,注意听讲啊,你看老师是怎么一步一步把它搞定的,好他就做这个事儿,那么他一旦他一旦接收到这个客户端的一个连接,他应该怎么办呢?各位他把这个事情应该交给另外一个文件去做,比如说。来各位,我再画一个文件啊,我再画一个文件。OK,我再画一个文件。这个文件呢,我给它取个名字叫什么呢?叫做一个处理器,叫做一个处理器,我姑且给它取个名字叫processor。这个呢,呃,有点类似于他是一个总的总的管家。呃,这个地方我用我采取的一种思想呢,就类似于MVC的思想。
09:01
那么MVC这个思想呢,它的最核心就是说把一个请求,把一个事情先交给一个。控制器或者叫一个处理器,这个处理器呢,它根据这个业务的不同,把它分散到什么样不同的这个小的控制器去去做,那么小的控制器呢,又去调它的service层或者是DA层完成,所以说我先写它写到这这个呢,你可以把它理解成是一个总的处理器啊,你它的功能是一个总的处理器,注意听啊,OK,它是一个总的处理器。啊是个处理器,他干什么事情呢?你得明确他的身份和地位,他的事情就是他会干什么呢?根据注意听根据用户的请求啊,就叫客户端的请求吧,对,最好不要叫用户了啊客户端的请求,他根据客户端的请求干什么呢?来调用不同的。
10:03
其他的这个具体的一个控制器完成任务啊,根据客户端的请求调用调用呃对应的对应的处理器完成完成任务,处理文件啊,处理处理文件吧,处理呃,就叫处理器也可以处理器。完成任务,完成相应任务,完成相应的任务,OK。好,这是他要做的一件事情,就是他的核心点,就是他去根据他请求来做处理,那么到时间呢,他的请,他的连接是这样一种方式,就是他把这个请求就发给了他。OK,呃,也就是说其实它是一个调用的关系,它调用它,那么这一个控制器呢,是不行的,太单薄了,你看我们以前有同学学过抓to。就知道tru two呢,有一个总的这个控制器叫XX类似于这么一个东西,那因为你呢,就好像是个大管家一样,他管了哪些呢?诶他管了很多小的这种控制器,那比如说在我们这儿呢,我们就可以设计这样几个同学们听我讲。
11:11
那首先呢,我们认为将来肯定是有这种控制器的,什么控制器呢?就是专门处理关于用户的一些请求,跟用户相关的一些请求,你比如说我这里画一个文件,我这里就画一个这样的,这样的啊,总空我们画一个别的颜色,比如说我这里起个名字叫user,注意听user process。点够这是一种思想啊,同学们这是种思想,这种思想呢,他已经很成熟了,那他是干什么呢?就是处理,处理追听,处理跟和用户相关的相关的这种请求,那你说老师比如呢,你看比如像登录。登录是跟用户相关的,再比如说注册,注册是跟他相关的。
12:05
再比如说注销,比如说你注册完了之后,有可能要注销一个用户,对不对,可能要是注销。注销,你再比如说跟用户相关的还有哪些功能呢?呃,你比如说是这个,呃,用户的取他的用户列表啊等等等等,对不对,你都跟用户相关的嘛,那比如说我们是用户列表的管理,诶用户列表用户列表的管理。管理等等吧,等等,那除了这种处理器呢,你肯定还有跟短消息相关的,因为你作为这种这种这个聊天室,你肯定会聊天嘛,聊天呢,我们把它称之为短消息,那我再写一个,就是说大家看这个思想,比如说啊,我这里还还设计一个新的这个处理器,但这个处理将来会可能会很多,随着你的功能增加,可能有很多,那这个就是未知数了,根据你的业务有关系,比如说我取个名字。
13:02
啊,我取个啊对,我取个名字啊,叫做什么呢?来各位同学看一下,我取个名字叫s SM SM process点够,那这个呢,我是处理什么呢?处理和这个短消息相,就是发送的短消息。啊,即使短消息短消息。短消息相关的相关的这种请求。相关的请求,你比如说聊天的,比如群聊。对吧,群聊。群群聊,或者是点对点的聊天。点对点聊天。点对点对点聊天。啊。点对点聊天。聊天。好,就是我们私聊,那当然说老师还有什么呢?你比如说将来你想发这个跟文件语音相关的,那么我们叫做I'm啊,即时通讯的M'你比如说你你要发个文件,你要发个图片,你要发一个什么共享的一个东西,你再写一个处理器啊,专门处理那个逻辑,那这样就分而治之了,那相当于说诶,我根据你的请求,我来调用,或者是让不同的什么呀,让不同的这个处理器帮我干活。
14:23
这就跟我们现实生活很像了,什么感觉呢?就好像有一个客户来了,先有一个前台,先有个前台,现在说哎,来客不你你来了,你来了,好,我就找,找到这个咱们的总调度室。那一般来说公司都有一个专管这个总调度的嘛,总调度说哦,你你要找谁啊,你要找张经理,你要找这个,比如说跟这个咱们业务相关的经理,我就去找业务的,诶你比如说你要找销售相关的,我找销售的一个负责人,诶这样种思想呢,他是很通用的,也很形象,也很形象,而且扩展性也非常的棒,那么这个时候呢,诶写完这个地方呢,针对我们目前后面还有一堆东西,我先暂时不画,因为现在呢,我们暂时还没跟数据库发生交互,等到数据库发生交互的时候呢,我们这地方还有一层。
15:16
叫service层或者叫DAO层,OK,但现在我们还没有数及到数据库,所以说我先打到这个地方,那这地方还有一个东西,各位同学我们应该还有一个特别重要的一个东西,就是什么呢?就是目前我们已经正在用的东西,就是那个工具类,那我们一般还会还会单独的抽一个东西出来,叫这个u tr工具相关的,比如说我把u tears.go单独的写出来,这个干什么呢?就是把一些。把一些。把一些常用的这个工具啊,工具的这个什么,这个像它的这个结构工具类,或者结工具的函数啊,或者是那个结构体,结构体抽取出来,然后呢,等到别人要用的时候,统一提供这种常用的方法,提供什么呢?提供提供常用的这种这种方法和函数,对常用的方法函数,因为你想嘛,同学们想你在这个过程中,不可避免的就是在这个process啊,或者这个嗯,这个pro process里面呢,都会用一些。
16:27
通用的方法,你比如说读文件或者读读包,写包肯定是通用的嘛,那通用的地方那何必要写到这呢?甚至将来像这种消息的定义,它大家都用的,共用的东西,我们就单独的抽出来,那这样子的,如果你需要用好,你就从这里来用它就可以了。好,你来用它就可以了,我给你提供这样一个,给给你提供这样一个111个工具,同样你这边呢,也有可能去用它,好我也让你去用,就你要用我就给你用就完了。好,这是我们的一个关于关于这个服务器端的一个思思路,对,这是一个思路,当然了,服务器端和这个客户端呢,还有一个共用的就是就是我们刚才写的那个common包,因为它有时候还有共用的一些协议,我们可以单独的再抽出来啊,比如说。
17:18
我这里面还有common。啊,如果将来要增增加这个东西呢,我们在这讲message这个包里面有什么呢?有有这个服务器端,服务器和客户端,客户端共用的。呃,共用的。共用共用的一些这个呃文件,你比如说现在我们共用的就有这个message go,比如说。啊,比如比如说这个message,当然后面还有很多公用的,你比如说后边。我们肯定在操作的时候要把这个信息抽取成一个user结构体,这user结构体肯定客户端和服务器端都是一样的,那肯定要这么做好同学们这一块呢,就是我们服务器端的一个分析,好我给大家整体来画一个小颜色啊。
18:07
整体来画一个小颜色。好,各位朋友,思路就分析完毕了,思路就分析完毕,那么思路分析完毕过后呢,我们下一个工作就是怎么样啊,把它给。抽取出来,好,我先把这个思路给大家画到这里来,然后我们再写代码,这是我们的一个思路啊,画出这个腾序图呢,就把思路给它展现出来了,OK。我把这个思路给大家先放到这儿啊。这是我们服务器端的一个改进思路,先改服务器怎么样,再改客户端。好,我把它粘贴复制一下。粘贴复制一下。好的,这是我们的一个思路分析,就先给大家介绍到这里。
我来说两句