+-
react/vue中的设计模式

前言

程序员修行一途乃内外兼修,耗尽大半生时间,用头发以及健康换取通往自由的钥匙。程序员和武功一样也分为内功和外功。内功主要是提高武学修为,包括一些经法和心法,比如小无相功,吐纳法等等,这些在武学上应该算是至高的内功心法。外功是一些武术招式,比如“降龙十八掌”等。
现在程序员都特别注重外功的修炼,会把所有的技能点都加在了不同的武功上了。殊不知,内功才是可以让你的修行事半功倍。

内功心法

确保代码在离开你的时候比来之前更健康。(重构) 理解多种程序设计方法并知道何时使用(架构)

一些原则的自律(

Think as a Tester 像测试者一样思考 **Demeter Principle 一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立 Stop complaining 停止抱怨 Composite Reuse Principle 尽量使用合成/聚合的方式,而不是使用继承

内功无法短时间让你的简历加分,却可以提升你的核心竞争力。学习能力,动手能力,产品能力等等

外功秘籍

必要的知识树 通用的业务解决方案 前端工具的开发和使用

我们平时99%的时间可能都是在积累外功秘籍毕竟前端工具太多。 毕竟光一个状态关系常用的就用4,5种。而且大都是通过业务功能不断积累修行来的。想练成绝世武功,除了需要天赋、勤奋、方法、师承外,还需要花时间沉淀自己的方法论。

设计模式

那首先需要花功夫学习的是设计模式。设计模式是不受语言限制的。是一种具有迁移能力的知识,学会后可以受益整个职业生涯。而语言、框架则不具备迁移性,前端许多同学都把精力花在学习框架特性上,遇到前端技术迭代时期就尴尬了,这就是为什么大公司面试要问框架原理,就是看看你能否抓住一些不变的东西,所以洋洋洒洒的说上下文相关的细节也不是面试官想要的,真正想听到的是你抽象后对框架原理共性的总结。

GOF23种设计模式

那首先通过我们最熟悉的react||vue来了解一下GOF.
GOF是设计模式的经典名著《设计模式——可复用面向对象软件的基础》,在书本总结了23个设计模式。我来罗列一下哪些设计模式是我们见过的。

单例(Singleton)模式
定义:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。
例子:Vuex 保证唯一 Store,以及单例组件 工厂(Factory Method)模式
定义:一个用于创建产品的接口,由子类决定生产什么产品。
例子:将new操作单独封装,遇到new时,就要考虑是否该用工厂模式。 在组件中传入实参,返回出不同的组件**

抽象工厂(Abstract Factory)模式
定义:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。
例子:
比如说有个案例有不同的订单状态对应不同的操作按钮。我们是不是一般会写出如下的代码

    switch (status){
        case '待付款':
            setState({status:1})
            break;
}

如果我们把订单状态的一些判断与业务代码掺杂在一块,不利于我们做扩展和复用。那对比一下下面的代码

    export default class OrderStatusFactory {
        createStatusObjWith (status) {
            let obj = undifined
            switch (status) {
                case '待付款':
                    obj = new StatusWaitToPay()
                    break;
                case '待发货':
                    obj = new StatusWaitToShip()
                    break;
                ...
        }
        return obj
    }
    //拿到数据使用
    let orderStatusFactory = new OrderStatusFactory()
    let status = orderStatusFactory.createStatusObjWith(data.status)
    this.setState({ status: status })

组合(Composite)模式

定义:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。

例子:组件

组合模式给我们的启示,组件接口设计三原则

保持接口小,props 数量要少 根据数据边界来划分组件,利用组合(composition) 把 state 尽量往上层组件提取

同时,我们也接触了这样一些最佳实践:

避免 renderXXXX 函数,直接使用独立的纯函数组件 给回调函数类型的 props 加统一前缀,比如 on 或者 handle 使用 propTypes 来定义组件的 props

观察者(Observer)模式
定义当一个变量值被修改时,可以自动通知所有关注这个变量的其他对象,自动重新更新获取这个变量的新值
例子:vue的双向监听就是基于观察者模式实现的

参考
GOF的23种设计模式