资讯专栏INFORMATION COLUMN

最佳实践

iamyoung001 / 3321人阅读

摘要:什么是重构字面上的理解重新组织结构为什么要重构原来的结构是什么样子的有什么问题函数逻辑结构条件判断循环操作包含关系集合关系非关系可扩展性差新的变化不能被灵活处理对象强耦合可复用性差重复代码多性能消耗太多随着技术发展新的好特性如何重构知道问题

什么是重构?
字面上的理解: 重新组织结构
为什么要重构?
原来的结构是什么样子的?有什么问题?
1. 函数逻辑结构[条件判断、循环操作]: 包含关系、集合关系、非关系...
2. 可扩展性差,新的变化不能被灵活处理
3. 对象强耦合
4. 可复用性差, 重复代码多
5. 性能消耗太多
6. 随着技术发展, 新的好特性
如何重构?
知道问题是什么, 针对问题进行重构
可扩展性差,新的变化不能被灵活处理 eg
let checkType = function(str, type) {
    switch (type) {
        case "email":
            return /^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$/.test(str);
        case "mobile":
            return /^1[3|4|5|7|8][0-9]{9}$/.test(str);
        case "tel":
            return /^(0d{2,3}-d{7,8})(-d{1,4})?$/.test(str);           
        case "number":
            return /^[0-9]$/.test(str);
        case "english":
            return /^[a-zA-Z]+$/.test(str);
        case "text":
            return /^w+$/.test(str);
        case "chinese":
            return /^[u4E00-u9FA5]+$/.test(str);
        case "lower":
            return /^[a-z]+$/.test(str);
        case "upper":
            return /^[A-Z]+$/.test(str);
        default:
            return true;
    }
}

违反开放 - 封闭原则[对扩展开放, 对修改封闭]
策略模式: 把一系列算法进行封装,使算法代码和逻辑代码相互独立
函数单一原则

let checkType = (function() {
    let rules = {
        email (str) {
            return //.test(str);
        }
        ...
    };
    
    return {
        check (str, type) {
            return rules[type]? rules[type]() : false;
        }
        addRule (type, fn) {
            rules[type] = fn;
        }
    }
})();

可扩展性的表现形式

对原生对象、库、框架的扩展

1. prototype

2. jquery的扩展性
   三个API:$.extend()、$.fn和$.fn.extend()

3. vue扩展
添加全局方法或属性
添加全局资源: 过滤器、指令、过渡
通过全局mixin添加一些组件选项
添加vue实例方法
基于vue的扩展[ 在组件或插件 install]

日常开发中

函数写法优化

function formatStr (str) {
    return str.replace(/(d{4})(d{2})(d{2})(d{2})(d{2})(d{2})/, "$1-$2-$3 $4:$5:$6");
}

function formatStr(str, type) {
    let i = 0;
    let _type = type || "xxxx-xx-xx xx:xx:xx";
    return _type.replace(/x/g, () => str[i++]);
}
function createPhoneNumber(numbers){
    var format = "(xxx) xxx-xxxx";
    let i = 0;
    return format.replace(/x/g, () => numbers[i++]);
}

who like it?

// 模版字符串 or 手动拼写
function likes(names) {
    let template = [
        "no one likes this",
        "{name} likes this",
        "{name} and {name} likes this",
        "{name}, {name} and {name} likes this",
        "{name}, {name} and {n} others likes this"
    ];
    let idx = Math.min(names.length, 4);
    
    template[idx].replace(/{name}|{n}/g, (value) => {
        return value === "{name}" ? names[idx++]: names.length;
    });
    
}

shortest word?

// apply | call
function findShortest (s) {
    return Math.min.apply(null, s.split(" ").map((val) => val.length));
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95091.html

相关文章

  • 简介:CII最佳实践徽章 - CNCF毕业标准要求之一

    摘要:已经实现并维护了核心基础结构计划的最佳实践徽章。年中国开源峰会提案征集现已开放在中国开源峰会上,与会者将共同合作及共享信息,了解最新和最有趣的开源技术,包括容器云技术网络微服务等并获得如何在开源社区中导向和引领的信息。 从沙箱或孵化状态毕业,或者作为一个新项目加入作为一个毕业项目,项目必须符合孵化阶段标准以及: 有来自至少两个机构的提交者。 已经实现并维护了核心基础结构计划(CII)...

    jzman 评论0 收藏0
  • 笔记: node最佳实践1 - 项目工程最佳实践

    摘要:原文阅读工程结构最佳实践组件化按照功能划分按照组件划分层次化不要在中写太多业务逻辑,专注层业务层要单独抽出数据库层单独抽出化把常用组件做成包分离的和配置化环境感知根据不同环境使用不同配置 showImg(https://segmentfault.com/img/bVYQsC?w=2558&h=817); 原文阅读: nodebestpractices 1 工程结构最佳实践 1.1 组件...

    APICloud 评论0 收藏0

发表评论

0条评论

iamyoung001

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<