首先说明,前端架构代码封装,不是说设计模式,而是封装约定俗成的规矩,这个规矩多半是由编程语言缺点形成的。javascript
先看例子前端
class ClassName {
// 开发者的方法名
static _getBase64ByCb (file, cb) {
// todo
}
// 使用者的方法名
getBase64 () {
const file = this.file
let base64 = ''
this._getBase64ByCb(file, function (base64) {
base64 = base64
})
return base64
}
}
// 后续添加的使用者的方法
ClassName.prototype.getBase64s = function () {
const base64s = []
this.files.forEach(file => {
let base64 = ''
ClassName._getBase64ByCb(file, function (base64) {
base64 = base64
})
base64s.push(base64)
})
return base64s
}
复制代码
从_getBase64ByCb
、getBase64
、getBase64s
三个方法,基本能看出java
getBase64s
方法一开始没有分装,后续使用者在原有基础上进行扩展。_getBase64ByCb
是静态方法?这里不是静态方法,而是模拟 protected
属性。Class._fn
protected 保护方法Class._proprety
protected 保护属性Class.prototype._proprety
private 私有属性,或者只读属性Class.prototype._fn
私有方法Class.prototype.$fn
框架和第三方插件提供实例化方法Class.prototype.$proprety
框架和第三方插件提供实例化属性这类规定不是那本教科书写着,而是js程序员之间默认规矩。(不了解,没法读源码)程序员
抽象封装和灵活调用是矛盾体,可知封装和灵活要达到平衡,即哪些即封装,根据每一个公司的具体的业务能力而定。 这里列举我我的封装的理解,我大部分所作的事情,基本上是业务,也就业务驱动。编程
第 1 点,这分的好处,在接口变动,ui 交互不改; ui 交互更改,接口数据不改;若是数据和ui交互都更改,重构。 第 2 点,其实不少脚手架通常都是寻寻渐进,形式不固定,只要能知足 6 点便可。后端