为了账号安全,请及时绑定邮箱和手机立即绑定

解耦谁能给形象的解释一下,能附带代码最好

解耦谁能给形象的解释一下,能附带代码最好

桃花长相依 2018-08-07 14:09:23
读一些js,node的相关书籍总是提到解耦这个词汇。不明白什么意思,希望有人能给比较形象的解释一下
查看完整描述

1 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

打个比方说,你有如下代码:

var filterUsers = function(cb){
    $.get('xxx-url')
    .done(function(users){        
        var leftUsers = users.filter(user => user.age > 20);
        cb(leftUsers);
    });
};

这是一个非常简单的,异步获取用户数据,并且过滤掉年龄小于等于20岁的人后,将剩下的用户数据返回的方法。

那么现在我希望你写一个测试用例,测试一下你的“过滤”部分的逻辑?怎么办?这时候如果不修改filterUsers源码就很难测试了,因为里面耦合着真实的ajax异步请求,莫非测试一个小小的“过滤”逻辑,你还要搭一个服务器给她,然后写各种不同的数据返回的服务么?这也活得太累了。

但如果我们把获取异步数据的部分提取出去,像这样:

var UserService = require('./UserService');var filterUsers = function(cb){
    UserService
        .getUsers()
        .done(function(users){            var leftUsers = users.filter(user => user.age > 20);
            cb(leftUsers);
        });
    });
};

这时候里面不再耦合那个具体的异步操作,而是引入了一个叫UserService的模块,那当我们测试“过滤”部分逻辑的时候,只要替换掉这个UserService,用一个返回假数据的模块,就可以轻松的测试各种数据返回的情况下,“过滤”逻辑的工作状况是否正常了。

这里就是把过滤用户和获取全部用户数据两个部分,解藕了哦!


查看完整回答
反对 回复 2018-09-16
  • 1 回答
  • 0 关注
  • 751 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号