编程之代码抽象三原则
编程之代码抽象三原则,这三原则仔细推敲,与23种设计模式不无关系。
23种设计模式,在此我不做详细介绍和说明,因为我目前也正在学习,在学习设计模式的时候,有一点非常重要,
引用王阳明先生的理念“知行合一”,将理论同实践集合起来,这样就不空中楼阁了。
另外还在此补充一点,这里我引用王船山先生的名言“实践第一”。
编程是一门实践性科学,缺少编码的经验,光谈理论,那么是行不通的。设计模式,是前辈们,GOF(四人帮)等编程经验的总结。
形象的说,如果没有一点功力的基础,就想练九阴真经那是不行的。
只有当编程开发经验达到一定的积累时,这时你会发现你不得不重视代码的质量,之前我也强调过单元测试的重要,之所以重要是因为可以避免web界面测试犯错误,导致研发进度延迟和开发效率降低。
那么这里我要说明的时,当编码时就要意识到你所要写的代码质量,这个质量可以用这么几个标准来衡量?
(1)给几个月后的自己看和同事看,他们或者自己能否在较短的时间看懂(可维护性);
(2)当某个业务逻辑需要新增新的功能,是否在此基础上新增接口或者方法就可以做到,而不是需要代码重构或者重新写一遍(可扩展性);
(3)当A类功能需要修改,不会影响到B类功能(耦合性低,软件遵从原则“高内聚,低耦合”);
下面说的代码抽象三原则,我相信大家对此并不陌生了。
一、DRY原则
DRY原则,翻译过来的意思是"不要重复自己",用编程的话来概括,不要写重复的代码。
大家如果看过我的一些博客,应该可以看到,我时不时会强调这个DRY原则。
之前我就说过,Java的代码生成器就是DRY原则较好的实践例子,复制+粘贴虽然可以提高开发效率,但是那也是人力所为,也是需要时间的,代码生成器将通用的增删改查在一分钟甚至半分钟都不要的情况下,即可生成几十张表的代码(entity,dao,service,serviceImpl,controller,xml),而且这些代码也很简洁易懂,同时也不容易出错,有的时候,即便的复制粘贴,人总是有粗心大意的时候,所以往往有时就是因为这样,犯了一些低级错误。而计算机只要你给它的指令是对的,它几乎是100%不会犯错,前提是指令正确无误。
DRY原则,无时无刻不再用,研发的伙伴们对此也不陌生了。
二、Shy原则
Shy,英文翻译过来的意思是"害羞",Shy原则可以用设计模式遵从的一个原则“迪米特法则”,理念基本是一致的。
简单的说,一个类尽量与其他的类发生联系。
以我使用MyBatis的经验为例:
比如有的时候我需要多表连查,需要获取其他实体的信息,比如A、B、C三个实体,我以A为主,需要获得B、C的一些属性(字段)信息,通常根据一对多或者多对多,我在对应的xml加上association或者collection,并在该标签类加上对应的字段和属性,和在A实体加上List<B> b或者 C c即可。
就能达到目的,当然了最爽快的办法是直接在A实体上加上B、C实体的属性,但是那样一来对于以后维护,将会增加非常大的成本。
特别是多人开发的情况下,如果不统一规范和遵从统一原则,那么本来多人开发,有的时候因为沟通会导致一些问题,使研发进度延迟,同时也会因为代码不规范严谨,乱七八糟导致项目Bug百出,研发人员就处于无止休的改Bug阶段,要知道,牵其一而动其余的代码,是极为不好的,因为这样一来,改为旧的Bug,就会出现新的Bug。
很多时候互联网企业,特别是中小型企业,由于不重视代码规范和不养成良好的编码习惯,导致总是在加班加班。
对于企业而言,增加的时间成本,从而导致少盈利,对于个人开发人员,因为自身不好的编码习惯,导致无止休的改bug,虽然对于一些解决问题的能力有一定的提高,但是就我个人看法,很多bug毫无技术含量,改多了意义也不大,还不如养成良好的编码习惯,写一手优美的代码(可维护,可扩展,低耦合),这样可以拿出很多时间学习,学习新的技术,让新的技术提高开发效率,让工作效率高,让整个团队研发能力强,这样一来,可以说,即可以迅速的涨工资,有能让自己的能力更上一层楼,同时,对于成家立业的人,有更多时间陪伴自己的家人,对于男女朋友而已,可以有更多的时间在一起,互相增进感情。
三、三次原则
这个三次原则,最好理解了,简单的说,当某一段代码需要在三个或者三个以上的类需要引用,那么将其抽象为一个方法进行调用,这样可以减少冗余的代码,代码行数并不是越多越好,特别对于一个类来说,类中的代码上千行和上百行,是需要加载时间的,加载时间越长,效率就不是特别高。有的时候,代码真的没必要上千行,就我开发期间,见过的代码包括开源的代码很少有上千行的,而且人家的代码,也就是四五百行,简单明了,而且又不少遵从三次原则。我哥也曾对我说过,无论是前端js或者java代码也好,当这段代码出现多次时,将其抽象为一个函数进行调用。另外我一个朋友他是在一家国企工作,他们公司目前基本处于项目维护阶段,时不时就是根据客户需求在原有的系统上修改或者新增功能,特别是他维护一个之前开发人员的代码,发现一个非常让他愤怒的事情,就是很多代码出现重复的,而那些重复是可以通过抽象为一个函数引用的。
小结:
我希望我自己和编程朋友们,牢牢记住一点,让编程变为一项优雅的智力活动,而不是重复的体力劳动。