情景一 :你接手了老代码【屎山】,在这个基础上开发新功能。发现在原有的代码上扩展,难度太大!至此,在开发之前,你需要先修改重构原来的代码。痛苦~~~。
- 版本 1.0 :根据 userId 获取用户信息
// A 开发
function getUserInfo(userId) {}
// B开发
function getUserInfo({ userId }) {
let { userId } = data;
}
- 版本 2.0 :根据 userId 和 cropid 获取用户信息
// A 开发
function getUserInfo(userId, cropid) {}
// B开发
function getUserInfo(data) {
let { userId, cropid } = data;
}
仔细观察,上面的代码貌似没有多大的区别。但是注意传参变化。两个版本都可以实现现有的需求。但是我们想想,假如 版本 3 还需要其他参数呢?按照 A 开发的思路,还要继续添加。这里面隐含了一个必要条件:「参数顺序」。而 B 开发的开发思路,仅仅是在传参对象中增加属性。是函数内部可以通过解构赋值快速获取对象的值。
你是想在哪个开发的代码基础上迭代版本 4 呢? 我想大多数人都会选择 B 开发的代码上继续迭代。
再说几个屎山代码吧:
// B代码: 嵌套多层【大于2层】if
if(a>0){
if(b<0){
if(c==0){
....
}
}
}
// 代码:
以上两种代码,可读性和可扩展性都大打折扣。我想谁遇到都会说一句:F U C K !
那么,为了避免别人远程问候,我们应该怎么做呢?
1.给自己和别人留点余地【可扩展性】
场景1: 函数传参,大于2个,使用对象。
function getUserInfo(data) {
let { userId, cropid } = data;
}
场景2: 多重判断,使用短路运算符
if(hasUser&&hasToken){
...
}
if(hsaRole||hasToken){
...
}
场景3: 多种场景判断,使用map或对象映射
let userInfo = {
user1: {
age: 20,
},
user2: {
age: 25,
},
};
let getUserAge = (username) => userInfo[username].age;
let age = getUserAge("user1");
console.log("age", age);
场景4: 类似函数调用,灵活使用字符串拼接
class Fun {
fun1() {
console.log("fun1 log");
}
fun2() {
console.log("fun2 log");
}
}
let key = 1;
let targetfun = `fun${key}`;
console.log("targetfun", targetfun);
let fn = new Fun(); //fun1
fn[targetfun](); //fun1 log
说明:这种函数调用,在vue开发中【新创建的对象就是 this 】非常好用。特别是组件封装,表单项校验。可以省去很多冗余代码。
2. 代码提交注意事项
2.1 个人开发分支定时同步总体的开发分支。个人分支合入总体开发分支前本地先合并解决冲突。要是多人修改了同一个文件,冲突不好解决,不能单纯的“以我为准”。这样,绝对会有人问候你的。
2.2 开发代码时,保证 自我负的部分的 “正常运行”。如果需要引用别人开发的代码,发现问题,优先提示对应模块负责人修改。不要自我感觉良好去修改。
未完待续。。。