代码封装技巧和原则

实际开发过程中,一个系统会出现一个服务可能有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) {

//实现级联功能

}

}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值