00:01
好,来,我们接着往后看,呃,那么我们刚才把这个需求给大家说明白了,接下来我们就来做一个具体的实现啊,怎么实现呢?那么最起码你得先把这个加减乘除的功能写好,写好以后呢,我才可以在你这个加减乘除的方法里面,是不是去做我这个日志的一个记录啊。对吧?OK,那那我们就一起来写一写啊,啊回到我们的开发工具里面啊,我们把这个都关掉啊呃,这里面的话呢,我们再去写上一个包啊,用一个package,我们要讲的是什么呀?At,硅谷点spring,我们现在讲的是AOPP啊,能明白吧,AOPP,然后呢,Before,好,Before就是前缀啊,LP之前我们讲的东西啊,那在这个里面呢,我们先去写一个接口啊,这个接口就叫做什么呀,Ome就是我们的数学是吧,计算器C啊啊calculator就是我们的一个算术计算器啊OK,来把它写出来啊,这是我们的算术计算器啊OK,这里面呢,有四个方法啊,加减乘除,那我分别来写一下啊,比如说ad,好,那我给它传一个什么,传个I,传个in类型的J。
01:18
两个数吧,然后呢,再来写啊减是什么来着,S是吧?啊A加IG啊减,然后呢,呃,加减乘呢啊乘是什么呀?尔吧,是不是尔啊也是除呢啊Di。好,And j OK,那么大家来看一下,我现在是不是把这个加减乘除四个方法就写好了,对吧?那么先好以后的话呢,接下来我们就来去写一个具体的实像啊,在这个下面我们去用一个class,我们叫什么呀?来magic这看出来的啊,诶C是吧,然后呢,Port啊啊让他呢去实现我们的这个接口啊,来实现我们的接口employment,我们的magic这个看回这个接口啊啊那么这个接口呢,呃,有四个抽象方法,我们需要把它写出来啊,我们来把它实现一下,然后呢,这方法里面的这个都给它删掉啊,OK,那我们先把最基本的功能做出来啊,怎么做这个功能呢?注意我来写一个out,就等于I加上个J对不对,成一个result这个功能是不?
02:50
写好了加是不是写好了,诶我怎么都写成word了,好得有一个反回值啊,这个写错了,我们来改一下,要不你就算完了没结果也不行,是不是好都改成int啊,刚才写错了,那这个位置我们来手动的改一下吧,T类型的啊T类型的啊A特类型的好,这个也手动改一下啊AOK,都改完以后呢,我们再来看这个是写好了,那下面的也是一样的道理啊,这是一个减,那就是out,就等于I减上了J好成一个好out,下面也是一样的,我们再来看这个好等于I乘上的解吧,OK,然后呢,Return我们的好,Re result,好,最后一个方法,等于I除上了接吧,好,然后呢,再去远成我们的来称我们的result。
03:50
明白了吗?这个能看懂吧,这么简单的代码没问题吧?OK,好,那就把它写好了来,那么写好以后呢,接下来我们就来去加我们这个需求,什么需求呢?大家注意,就是我希望你在日志啊,就在你这个加减乘除前后呢,分别去记录一下我的这个日志啊,就是程序中正在发生的活动,我需要去记录,那记录什么东西呢?我希望是这个样子的,大家注意你在这个运算之前就是这个方法,这不是做具体的运算嘛,对吧?在运算之前呢,你帮我记录一下,诶,你拿上的是哪两个值,做了运算,然后呢,运算完成以后呢,在结果返回之前呢,你帮我记录一下我这两个值运算完以后的,运算完后的那个结果是什么,你也把它记录下来,也就意味着在你运算的前面这个位置,后面这个位置都要做一个日志的记录。
04:40
能听懂吗?OK,那现在我们怎么做呀,我们就围绕这个功能来讲的话,那其实也比较简单啊,就是大家可能呃,首先想到的就是,那你就在这去写你日志记录的代码不就行了吗?对不对啊好,那我们就来按照我们现在的这个分析呢去写啊,也就是我们这里面所能看到的,我在你这个前面呢,去记录一下日志,在你这个后面呢,我也帮你什么去记录一下这个日志是不是啊,也帮你记录一下啊好吧,那我们就来写一下,你看啊,这里面我写什么东西啊,记录日志嘛,那我们就简单一点,我去啊输出一句话就可以了哈C哦,我们来输出什么呀?啊比如说啊,就是我们的诶啊日志记录是吧,OK,我们把这个写上,然后呢,说什么呀,这个method啊,你记入日志吧,能记录的详细一点啊,谁呀,ADDDD这个方法啊,Begin with就是呢,开始做运算了啊,通过谁来运算的呢?我们来写上。
05:40
啊,加上I,加上一个逗号,加上J啊再加上一个右半的括号,这个格式能看懂吗?能看懂吧,那我就什么呀,把这个要运算的这个I跟J呢,就给他什么记录下来了,好记录下来以后呢,在这个位置我们还要去怎么写呀,写的是什么呀,是不是同样的呀?哎,日志记录啊记录什么呢?嗯,说这个啊,Method还是ADD,然后呢,End啊为了加上一个什么呀,结果是把这个结果记录一下呀,能看明白吗?OK,那么这个日志也就记录好了,OK,那么大家来看我这一个方法会写了以后呢,下面的一样不一样啊,一样一样吧,OK,那我们就可以怎么做呢?C位大法。
06:32
是吧,啊,那你还考虑啥呀,赶紧拷贝呗,你这你不可能再挨个再去写一次吧,是吧,来把这一改,你看这是不是写好了,好,下面呢,也是同样的道理啊好,那么我先拷贝着啊,大家呢,先来感受一下这件事好不好啊,好不好啊,不好啊啊,这个好不好啊。
07:06
啊,你看我很快就把这个功能写完了好不好不好啊,这还不好啊啊,那你希望手动吸啊还是怎么着不好是吧?嗯,那我给你分析一下啊,你们来感受一下好不好,我这很快我就把这个日志功能做完了,并且呢,并且什么呀,并且我通过CTRLCLCTRLV的方式,很快呢,就把这个代码都给它写好了是吧?啊那么请大家注意一下哈,呃,你说我们到公司里面上班,这个你要多少钱哈,这个钱他怎么给你衡量的呀?啊,你这多少钱怎么衡量你的啊,不知道是吧,长得丑就少一点啊,怎么衡量的呀?会不会啊,会不会干活?
08:06
是吧,啊,那肯定是根据你的能力能能力来给你定性呗,对吧?啊,那么其实大家注意哈,呃,我们就来这个简单说一下啊,就是像像这种呃,刚毕业的这种程序员是吧,就是刚从大学毕业,其实啥都不会对不对啊,可能会一点点啊,然后呢,去公司找工作,可能也就五六千块钱吧。对吧,那基本上现在这个行业的起薪也就是五六千五六千块钱对吧?啊,当然哈,这种五六千就是那种啥都不会的那种啊,真的啥都不会啊,可能能拿个四五千块钱,五六千块钱啊,会一点点的啊,那么公司里面怎么去给他们这个定薪的啊,他觉得我这我觉得你这个能力吧,啊,也就值这点钱啊,那他是怎么来衡量的呢?啊,他会来感受一下,就感觉一下通过这个面试的过程呢,去感觉一下你能一天写多少行代码啊,而且注意了哈,代码。有的代码难,有的代码简单,这个你们是知道的吧。
09:03
是不是啊,有些功能简单,有些功能栏嘛,对吧,那么他就拿这个比较简单的一些功能,并且呢,比较好做的一些功能来去衡量,你比如说哎,你一天能写300行代码啊,然后呢,一一个月工作是差不多二十来天是吧,我们就拿20天,平均20天来讲啊,那么你一个月你挣6000块钱,也就意味着一行代码就一块钱。是不是这个意思啊?是吧啊对吧,能算出来吧,啊,银行代码就一块钱,那你要按照这么算的话,其实也挺好的,你看我的是吧,就一会好几块钱我就挣到手了,对不对,没没毛病吧,啊其实确实是这样子的啊,像这个比较这个基层一些的这个程序啊,像这个初级的啊,或者说你这个可能还是一个实习生的话,确实你的工资不高,对吧,那就能看你干什么活了,实习的目的是什么呀,同志们啊,实习的目的是什么呀,就是这公司我告诉你哈,说的好听一点是给你一个机会对不对,说的不好听一点就是什么呀?啊,雇一个廉价劳动力,然后呢,不用给你钱,我还能让你给我干活,然后我还可能在这个一段时间内,我可以看出你这个人可不可以培养。
10:18
如果说比较,哎,你比较努力,发展的比较好,技术也提升的比较快,行,那你就留下吧,是吧,如果你在一段时间内没有提升起来,然后呢,该学的东西也学不会,行,那你就走吧,是吧,那17不就这样嘛,很现实的嘛,对不对,OK,好,所以说照就照我们刚才聊的这个东西来讲的话,那这种写起来确实挺爽的。对吧,我CTRLCCTRLV诶两块钱搞定是不是啊,你就边写你就边数的哈,一块两块三块四块是吧?啊这个感觉也挺爽是不是,但是大家注意了哈,呃,这是我们这个精神程序员做的,但如果说你这个呃定的这个职位是不一样,你是一个高级程序员或者什么中高级程序员的话,就不按照你每一行多少钱算的对吧?你们到公司以后,你们就会发现挣的钱最少的,每天干的活是最多的,写的代码也是最多的啊你别不信,你到时候你去看看去。
11:16
而反而那个拿的工资比较高的那帮人,他这个好像一天天无所事事的似的啊,也不写代码,也不干也不干活啊,那为什么人家工资那么高啊啊,人家有什么呀,人家有思想是吧?啊,人家是做设计的,做架构的,对不对,我每天就给你解提供一下解决方案就行了,是吧,我把这个东西给你说出来,你应该怎么做就行了,具体实现那都是交给那帮程序员去做的是吧?啊对吧,就这个样子的嘛,啊所以说呢,如果你要觉得干这个事挺爽的是吧,一天就写这么点代码也不难,我还能挣点钱啊,那其实你就完了,对吧,你不能老想着这么几块钱哈,能明白吧?啊OK,所以说呢,你看啊,我们这个说回来啊,那像这种的话,你觉得好不好吧,肯定是不好的,对吧,而且特别不好。
12:10
能明白吧,啊有什么不好的地方呢?我来跟你说一下,首先我们先说一下大家一下就能体会到的一个姿势,比如说你把这个写完了好,写完以后呢啊,你们领导说不行啊,你这个日志记录格式不对。啊,格式不对,他说呃,这个不能是冒号啊,这个应该换成它。那你应该怎么办,怎么改啊,一个一个改吧,啊那就改呗是吧,啊,然后你就想着说啊,那这个其实也简单,我就CTRLCCTRL这有啥难的是吧,那这分分钟我也把它改完了,是不是改完了呀?啊但是你注意了哈,这个东西你写完以后呢,你第一次你把它改了,然后你就应该要想到万一他再让我改怎么办。
13:06
是吧,你写完了,你说那领导你看一下,我又改完了,领导说,嗯,不错,但我觉得还可以再优化一下啊,你再去改是吧,你那档住是吧,这肯定是不对的,理解了吧,这么写就是一个什么了。为了实现功能而去写这个代码就是错代码啊,应变码完全没有设计的东西在里面。听懂了吧?啊,完全没有设计的东西在里面啊,好,这是第一个问题,第二个问题就是什么呀?本来我这是一个日志功能,而我这个方法是一个业务,就是核心业务的一个方法,你非要把日志功能跟核心业务方法呢,给它哦耦合到一起,你看谁都不爽。就拿日志功能来讲,我本来就是一个很集中的,我就是一个日志功能,你非要把我打散了是吧?打到什么呀,散到什么呀,散到每一个模块的每一个方法中都出现了日志记录的功能,把人家拆散了,这是不好的。
14:07
另外一个你再来分析,本来我就是一个核心的业务功能,业务方法,我里面本身就两行代码,就是很简洁的两行代码,我就把这个业务做完了,你非要把日志功能加进来,那么对于写这个业务功能的这个程序员来讲,他不仅要关心我的业务怎么去做,我还得关心你的日志怎么去做。能明白吗?这就是相当于你设计不合理了,你把不相关的一些东西呢,给人家耦合到一起去了,这种代码写起来是很不爽的啊,可能你们没有啊,切身体会过是吧?啊等你们以后可能啊,接触到这些事情的时候是,呃,接触到这些东西的时候啊,比如说啊,架构没有设计好,出现了一些问题,那么你就发现这个代码越写越不爽,越写越不爽,对吧,越写越复杂,越写越复杂啊,就会有这样一种感觉,但如果说一个架构设计的特别好,对吧,那么你其实你写代码写起来是很轻松的,很愉快的,对吧?因为这个功能一想你就知道怎么去做,因为你不用去兼顾别的,你就来单纯的去考虑我这个功能就行了,你不必要去兼顾任何东西。
15:18
能听懂了吗?OK,说错呢,这样写有什么问题呢?我们来看一下啊,问题就第一个代码混乱,就是越来越多的非业务需求,比如说日志啊,或者验证,你加入到我们这个业务方法里面以后,导致我的业务方法急剧膨胀,每个方法在处理核心逻辑的同时,就是我处理加减乘除核心逻辑的同时,我还得去考虑其他的一些关注点,比如说你的日志怎么做,你的这个验证怎么做,这个大家能理解吗?可以吧?再一个代码分散,你与以这个日志需求为例,你不能说为了满足这个单一需求,你就在每个模块的每个方法里面多次重复相同的日志代码。
16:00
你看看我们现在写的是不是每个方法里面重复性的出现什么,几乎都是相同的代码吧,对不对,而且注意啊,现在我只是这一个模块,那我的日志的需求,我在各个模块里面,我其实都得去用,那你就去想一下,这是一个模块里面,你就这么写,我有那么多模块,每个模块里面其实你都得这么去干。这件事情是很痛很痛苦的,你特特别是让你去改的时候,你就知道这件事有多痛苦了,明白了吧?啊,所以说了,现在存在这样的一个问题,什么问题呢?要么就是诶代码混乱,要么就是我们的代码分散啊,这个问题大家一定要明白,所以说呢,我们在写代码的时候,千万不能这么去做。听懂了吧,大家也是啊,你千万不要这么去写代码,你这么写代码,那就是完全完完全全没有任何设计在里面,就是为了实现功能而去写这个代码,理解了吧,像这种代码,如果你在企业里面把它写出来以后,那基本上你是拿不到高工资的。
17:05
明白吧,就冲你写的这个代码啊,就不会给你高工资理解吧,OK,那我们应该怎么去做这个事儿呢?啊,一会儿呢,我们会给大家去讲到一个技术,叫做什么动态代理技术啊,我们会使用这个动态代理呢,来去解决我们刚刚出现的那些问题,那么像这个代理的话呢,就相当于我们有了一些什么设计了啊,我们需要去设计一下我们这个代码,看看怎么去把它实现的更加的好一点,那么我要提前跟大家说这个动态代理有点难度,而且呢,不是那么好理解,听懂了吧,但是如果你要在企业里面,你呢,去做一些这个类似于设计的一些工作,对吧,你去做一些架构的讨论啊,架构的这个搭建啊,一些核心业务的一些编写,那么你的工资是很高的。所以说呢,大家要注意哈,有难度才有价值,你要天天做一些让你很舒服的事儿,对吧,那你是不可能拿到高工资的啊,你得让自己很不舒服对不对,你做的事得让你自己感觉很不舒服,得有压力啊,这样的话呢,你才可以啊,往上提升才可以拿到什么更高的一些工资,听懂了吧?OK,所以说呢,接下来我们就围绕着我们刚刚分析出来的这个问题啊,就是围绕着这个问题呢,来结合上我们的一个动态代理来去解决我们上面的这个问题啊,这是我们下节课要给大家去讲啊。
我来说两句