00:00
那么再往下走呢,那么咱们就不仅仅是我们现在的要把它这个通过K班的进行展示了,啊不光是通过K班去展示了,那我现在要干什么呢?我现在啊要把它对吧去我们这个发布成数据接口了,对吧?发布数据接口对吧?呃,那么如果说啊,要是发布数据接口的话,同学们对吧,如果要发布数据接口的话,那么这个时候呢,那你肯定得想我是不是得有一个专门的一个应用对吧,然后作为咱们接口了,对你想接口,你把相当于什么,相当于给别人提供了一个服务,然后别人呢,通过这个服务对吧,可以拿到咱数据对吧,那所以说你肯定呢,来开发一个we部程序对吧,就像谁似的,就像咱们现在这个log似的,对吧,Logo的,你可以把它理解成一个接口,对吧,它是干什么的,它是专门去接收我们现在这个数据的,接收日志的,对日志进行处理的接口,对吧?诶你只要把这个数据,这个日志生成,你发给我,我就会把它接收到。
01:01
到并且呢,落盘发送给卡夫卡啊,就这就是个接口,那么咱们现在干什么呢?那么咱们现在想这样,我呀要从我们的elect search里边把这个数据呢给查出来啊,然后查出给谁呢?给前端,那么这个时候呢,你得看一看前端想统计什么呀,对吧?那么咱们现在呢,主要有这么两个指标对吧,那一个是我们当前呢,或者说昨天他新增的一个日活这个信息,那么另外一个前端他想展示的是我们今天或者昨天,然后每一个的小时的它的一个日活的一个我们这个分布情况,那最终形成一个这样的一个效果,到精行这样效果,那么这个时候大家想一想,咱们现在前端要想实现这个效果,这个啊,它不一定是用咱们的K班来实现的,这有可能是前端自己写的,对吧,那么咱们现在呢,我模拟工程,那么我现在这个效果,其实它是通过什么呢?它其实通过我们的in char。
02:01
啊,他就通过咱百度的1AR对吧来实现对吧,这样的一个效果,对吧,这样效果,那么我现在呢,那就在想,那如果想要咱们这个效果的话呢,那么这个时候咱们啊得沟通一下,怎么沟通呢?说我现在想获取数据,那如果获取数据的话,那由我的接口给提供,对吧?那么这个数据的格式什么样呢?首先对吧,那你要想获取这个东西,那没关系,我到时候呢,给你返回的格式,那就这样的东西,对吧?大家看这是不是一个杰森啊,这是个杰森对吧?那么杰森包括两个内容,一个呢是我们现在新增日活的信息,那么另外一个呢,是新增用户的信息。对吧,哎,那么咱们现在大家看这个Jason,如果说啊,你现在对吧,返回的是这样的格式,那么你在咱们代码里边怎么样来封装咱们现在接对象呢。用什么来装?让利类是吧,那大家告诉大家不幸的消息对吧,你现在学的skyland程序对吧,那你们想这个发布到过服务器上的。
03:06
好像还没有发布的服务器是吧,你们这些该程序是不是都在本地运行,然后如果要是执行的话,也无非是把那咱们这个放到我们这个什么雅安上去去执行,对吧,但是你们开发外部应用嘛,好像没有对吧,所以说我现在这个事呢啊,我想交给这个spring BOO去做。啊,就我现在我想去写的Java代码。啊,谢谢Java代码对吧?那如果说我现在要在这里对吧,那我现在呢,把这扎va章写完之后,因为它的文定线,他们盖的服务器嘛,也要给一直提供服务,对吧,然后进下来,那咱们现在呢,那如果要访问的话,那这个东西一看,这是一个数组吧,我记得我曾经大家说过,所以一般咱们现在Jason它的一个工具,对吧?那么如果说要是数组的话,咱们用什么来封装粒子集合,对吧?然后接下来,那么咱们当前这个数组里面放的是什么?放的是不是一个接对象,这接对象咱们可以用什么来封装,说map克来封装呀,所以说我现在完全可以,对吧,用list里边嵌到map来封装咱们这个数据,对吧?这是第一个啊这块的东西,那么具体的展示的时候,它什么样的呢,有点类似于我现在呢,可以把这个拿过来连一下。
04:19
这个呀,有点类似于我们现在其实就是百度对吧,或者说这块其实也可以啊看一看,呃,咱们呢,在我这儿是吧。可以随便找一个,其实就类似于这个东西,同学们对吧,你像咱们上面这些东西,其实是不是都是我们这个一个链接呀,然后你点击它会跳的不同的一个我们现在这个页面嘛,对吧?其实这块呢,在统计的时候,这个效果呢,它也这个效果,对吧?它呢也是两个链接啊,它也是两个链接,然后你现在点击我们这个块的时候,那么它在下边呢,展示的是我们这个啊日活的分时统计,然后你如果是点击这块的话,它点击的是我们这个展示的是用户的对吧,这些统计对吧?那么咱们这块主要注重什么呢?就是我现在整个这个接口大概应该怎么来写,我们只做我们的日活这一部分内容,这块呢就给大家说明白对吧就行,就我现在这里面上午可能还有什么,有新的用户,然后可能还有什么呢,还有设备对吧,可能还有别的统计,然后呢,你点击不同的keep,微信短,其实这个叫keep标签啊,你弹点击不同的keep,然后下边呢,它展示不同的内容对吧,下边展示不同内容。
05:30
对吧?那么怎么去展示呢?其实每一次它这个点击的时候,它会触发一个单击事件,然后呢,它会把当前它都表示的ID对吧来给我传过来,比如说这个呢是midd对,是日活点U,这个呢是user,这个呢是m midd对吧,这个呢,比如说其他的对吧,然后我可以根据我当前我传的ID,然后呢来决定对吧来到底去展示什么数据对吧?那么当然后台呢,一般情况处理方式这样的,每一次点击的时候呢,它触及的触发单击事件,然后呢,在咱单击事件的处理方法里边来发送阿贾克斯请求,对吧,给后台来把这些数据呢给拿到这块呢,咱不做重点,对吧,咱们主要是看它的流程啊,看的流程对吧,还一个是这块的数据啊,你要展示,那么另外一个呢,还有一个就是分时,那么这个分时呢,有两天,一个昨天,一个是今天对吧?那所以说呢,那么咱们最终在展示的时候,整个是一个杰森,然后杰森里边呢,那有两个属性,一个是昨天的,一个是今天的,然后这里边。
06:31
放的什么呢?放的就是我们每一个小时它的一个日活数啊,每一个小时日活数,以及呢,每个小时,比如说用户的话,这用户数啊,或者每一个小时他的设备数对吧等等。对吧?哎,这个是我现在跟你的沟通的结果呀,我想要这个数据,对吧?哎,那么你现在从哪可以拿到的数据呢?那么咱们这里约定好的访问路径,你要想获取咱们总数的话,那么这个时候你可以去访问我们的publisher的这个域名端口多少呢?8070,多少8070,然后接下来那么你给我发的什么请求呢?对吧,这就是time total这请求,然后需要你给我传参数,这个参数什么呢?就是当前的日期啊,参数格式,那也需要注意对吧?然后如果你要想获取咱们每天分时统计的话,那么这个时候呢,你也是到咱们这个里边来对吧?到咱这里边来对吧?诶,发送我们现在这个请求,然后只不过呢,这个root hour,然后接下来那么ID,对这个ID其实什么,其实是我现在表示的是,诶,我要处理的是我们这个日活对吧?哎,当前做标记,然后接下来也要把日期也给我传过来,表示的是我现在呢日活的一个分时统计对吧,那么我们现在呢,把大概的啊这个格式弄明白了,那我准备写。
07:44
代码,那么写代码之前呢,大家想一想到我这个阶段,然后我们现在呢,去写我们这个spring BOO的项目,这不是第一个,是不是咱们在处理日志的时候已经写过一个了呀,对吧?那我曾经给大家提过,我现在呢,如果是这个Java项目,它一般呢,是我们这个SSM对吧,来进行开发对吧?那么只不过呢,我们spring boot是简化他们开发的这样的一个集成工具啊集成工具对吧?然后接下来那我们第一次再给大家介绍我们这个啊,这个logo这个项目的时候呀,那我们说呀,这里边应该有个分层对吧?一般怎么分层呢?应该分三层,一个呢是表示层对吧,一个呢是业务层,还有一个是持久层,表示层它主要负责什么?接收请求,然后呢给用户响应,业务层它主要处理我们业务,持久层是不是和咱数据库打交道呀,对吧,咱们logo里边是不是只有一个表示层啊。
08:38
在咱们这个logo在处理日志的时候,这里是不是只有一个CTRL,是不是只有一个表示层啊,对吧,那么现在呢,我对在我们这里边呢,我会要这个带大家做我们这么几个的这个程序,然后呢,我会不断的来完善,对一开始我只有表示层,现在呢,那我再给大家再加一层进来,谁呢把业务层加进来。也就是说啊,表示层它主要负责接收我应用请求,然后呢,业务层来处理我们业务,那么结合着我们现在程序来讲,那应该什么样的呢?比如说我现在呢,这个别的这个客户端或者前端,对吧?他给我发送一个这个请求,那么如果发送一个请求,大家想一想,我是不是得在CTRL里边写一个方法来处理这个请求啊,对吧?那么这个请求干什么呢?他要把咱们的总数给我获取到,这个总数怎么获取,你是不是得查询我们的elect。
09:30
对吧,你才能把这总数以获取到了对吧?那么查询这个事在哪做的,我不在CTRL里面做了,这属于业务啊,我要单独去开一层,放在咱们的service里边啊,放在咱们service里边对吧?所以说呢,那我们当前在实现我们现在发布数据接口的时候呀,它比咱们处理我们日志的时候呢,要多一层,一个是controller对吧,一个是我们的一个service层,对吧,而且我们在开发的时候,那其实呢,它有一些我们的开发原则,注意啊在这里。
10:01
除了设计模式之外,对吧,其实呢,还有一些开发原则对吧,什么我们这个对吧,这个迪米特法则呀,对吧,什么合成聚合复用啊,对吧,那么咱们在这里大家可以简单看一看,对吧,软件开发六大原则。对吧,来大家可以看到啊,在咱们这里边,其实呢,我在开发的时候,对吧,这里边呢,有一些我们这个开发原则在里边,对吧,测量原则在里边,那么其中呢,有一个我给大家介绍对吧,在这里对吧,呃,理式替换原则对吧,什么呢?对吧,就是说咱们现在呢,在这里多肽生命化参数是尽量使用我们这个负类型来代替,我们现在呢,对吧,这个具体的一个类型,其实这块什么呀,对吧,其实我们现在呢,在这里,其实它俩有点像啊,它俩有点像对吧,一个是你替换一个呢,是我们这个对吧,这个依赖倒转对吧,就是我们在编程的时候呢,他希望面向抽象编程,面向接口编程,不要面向具体。
11:05
什么意思,就是我现在本身,比如说我在咱们这里边对吧,我在咱们的CTRL层,我是不是要用到咱们service维层啊,就那你这思维层,那你可以直接给我写一个service实现类呀,对吧?但这样的话,对吧,这位service有可能有不同的实现,比如说我今天从以来search来查数据,那么以后呢,我有可能是从我们现在到click house来查数据,对吧?那么如果说你写死的话,那么这个时候他俩依赖呢,就过于紧密了,所以说一般情况下咱们呢是面向接口啊,编程面向咱们那个抽象编程,而不要直接,哎把这子类给我拿过来的面向具体这个其实是什么?就是我面向对象三大特性,它多肽的一个应用,就咱们经常说封装继承多肽,对吧,但是我们这里边这多肽的,你们当时学的时候有这概念,其实我们真正在开发的时候,同学们这个原则约束力对吧,那咱们应该使用多态对吧,你像我们在去定一些我这方法参数的时候,这个参数定义的什么。比如说我当。
12:05
前对吧,在咱们这里边有一个什么呢?有一个feet对谓的方法,短谓短谓动物的方法吧,F,咱们这个短谓动对,那你说我现在如果要被动物的话,你会穿什么?你会穿dog,你会穿咱们那个cat对吧,你会穿具体的某一个动物吗?那不好,咱们可以穿什么animal是所有动物都可以喂啊对吧,这个什么,这其实就多了一种体现对吧?那咱们现在这里其实就什么,我在这里面向咱们这个抽象对吧,它这个抽象负类对吧,然后现来面向接口对吧,而不要面向具体来进行编程对吧?其实除了这些之外呢,还有什么开闭啊,像这些对吧,大家了解一下对吧,算扩展对吧,你像咱们这开闭原则指的什么呢?就是我们现在对扩展开放,然后对代码修改关闭,对,就你可以扩展功能,但是呢,我一般不要去改变原来的代码啊,改变原来代码还有一个什么呢?迪米特法则,对,就是不要和陌生人说话,这个东西啊,就是最少知道就就是对他的描述的啊,这个对吧,就是说什么呢,不要有太多的依赖关系,对吧,比如说我现在。
13:05
在呢对吧,在咱们这里边对吧,在咱里边对吧?呃,有什么呢?比如说做学生对吧,这个管理系统,我问大家学生他本身是不是应该属于某一个专业对吧?你们是不是应该这个学院里面是应该某个专业啊对吧,专业在上边是不是应该有一个属于院系对吧?是不是有个属于院系呀,对吧,学生肯定有这两个东西,但是你们在设计的时候,大家注意啊,一般咱们不会在学生表里边有一个什么专业ID,有一个什么院系ID,一般不这么干,直接有一个专业ID就够了,为什么呢?因为学生这知道去通学生我是不是可以知道专业,然后在专业里边,专业是不是属于某一个院系啊,对吧,一般咱们这么设计对吧,这就叫什么,这其实叫我们这个对吧,这个迪米特法则对吧,就对于学生来讲,他只知道咱们专业的存在就OK了,你不用去关心咱们院系,说那我的确是有院系,属于院系啊,那没关系啊,你通过专业你是不是可以拿到院系呀,对吧?哎,所以说这会儿呢啊,稍微了解一下啊,稍微了解一下对吧。
14:05
好了,那我们现在呢,在这里我们再去写服务层的时候,对吧,那我们其实也遵循这个开发原则对吧?这里有两个,一个呢是接口,一个呢是实现类,对吧?那我在引用的时候呢,其实我使用的接口,但是到时候底子在执行的时候,它找到具体实现,对然后接下来还有一个什么呢?还有一个主程序对吧,这个呢,是我们当前代码的一个架构啊,代码架构对吧,上午呢,咱们就到这儿对吧,下午对吧,咱们开始写代码啊吧,就这样吧。
我来说两句