<返回更多

代码封装技巧和原则

2020-07-26    
加入收藏

实际开发过程中,一个系统会出现一个服务可能有N多个地方会需要使用,这个时候我们就会需要去将服务封装成一个公共的Class,但是倘若封装的不够完美,那么这个服务Class也将成为系统的鸡肋。下面我说的封装的思路,对于前段和后端开发都适合。

封装的原则

1、能够解决95%~99%的系统场景(也就是除了解决现在的问题,还能够支持将来可能出现的问题)

2、体现自己的核心处理能力(核心能力基本上不会去改变)

3、当服务改变或者升级时,对于老的调用方无感知,能够做到无需调整

封装的核心

代码封装技巧和原则

 

举个生活中的栗子

生活中存在很多电器设备,每个电器设备都需要使用电,而且每个电器都会有插头,通过插头插入插线板,那么机器就可以运转。下面做个名词的对应:

调用方:电熨斗(三眼插头)、电视机(两眼插头)

服务方:供电设备

核心能力:供电

Handler:家里的插座

电熨斗和电视机需要运转,就需要用到电器设备,而电器设备里面的Handler就是插座,电器设备的核心能力就是供电。由于调用方出现了不同的插头类型,所以插座的出现就是为了解决兼容的问题。插座的主要作用就是自身设计了两种传参——两眼插孔和三眼插孔,不同的设备接入对应的插孔,这样就可以享受到供电的服务。

问题1:如果出现四眼插头的设备怎么办?

回答:我们要做的其实就是新增一个对于四眼插头的支持,也就是对应的新增一个四眼插孔,这样对于老设备来说无需任何调整,仍然可以毫无影响的在原来的插座上享受供电服务。

问题2:如果出现供电升级怎么办?

回答:供电设备内部硬件升级,做到对于老设备的0影响。比如电压由220V变成了280V,如果供电设备不做调整,那么对于老的设备来说可能直接会被高电压烧毁。但是如果你要去设备自身调整成适配280V电压,那么无疑是一个巨大的工作量。

举个前端开发中的栗子

调用方:A页面,数据包结构A;B页面,数据包结构B

服务方:级联插件

核心能力:级联

Handler:数据包处理

var _Plugin = {

open: function(args) {

//实现级联功能

}

}

由于A页面和B页面都使用到了级联插件,但是各自传参数据包都不一样。所以我们在封装插件时,就需要考虑将差异化做到插件内部去处理。针对单个业务场景来说,既然要做到区分,我们就需要利用一个字段来处理,常用的手段是定义一个type传参,值类型为数字,不同的数字代表不同的数据包;其次定义传入的数据包的key,一般来说为了方便识别,key的命名就定义为data。所以上面的open方法的传参设计例如:

var args = {

type: 1, //区分业务场景

data: {}, //传入的数据

}

问题1:如果出现C页面,传入C数据包怎么办?

回答:type值多加一个用于区分C页面的调用。

问题2:级联插件更改怎么办?

回答:根据新的插件要求,内部做处理。比如原来的插件需要dt_1这样的数据结构,但是新的插件需要dt_2这样的数据结构,那么就在内部将原来的A、B.....处理成dt_2数据包结构

问题3:A、B数据包可以直接利用,但是C数据包不行,怎么办?

回答:内部将C处理成需要的数据结构

问题4:已经有N个页面调用了open方法,但是为了满足更多业务场景,需要对open的传参做调整,怎么办?

回答:利用方法重载的思路进行内部方法的改造,比如创建一个新方法open_new,它的传参是按照新的要求设计的,那么对于老的页面都在调用open方法,我们就必须将open的内部实现做调整,比如:

var _Plugin = {

open: function(args) {

//对args做处理,生成新的传参argsNew

 

args --> argsNew

 

open_new(argsNew);

},

open_new: function(argsNew) {

//实现级联功能

}

}

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>