亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解耦誰能給形象的解釋一下,能附帶代碼最好

解耦誰能給形象的解釋一下,能附帶代碼最好

桃花長相依 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 關注
  • 775 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號