素材牛VIP会员
解耦谁能给形象的解释一下,能附带代码最好
 阵***香  分类:Node.js  人气:963  回帖:3  发布于6年前 收藏

读一些js,node的相关书籍总是提到解耦这个词汇。不明白什么意思,希望有人能给比较形象的解释一下

 标签:node.jsjavascript

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv2 入门
jh***23 Web前端工程师 6年前#1

node 书籍的解耦一般指的是:
1.前端和后端解耦,前端和中端耦合(node 做中端)
2.前端和后端解耦(node 做后端)
一般都是大而全,理论上的东西。
而通过回调函数将数据过滤的方法并不是解耦(解耦是指减少两者之间的相互依赖),数据过滤实际上是过滤层严重依赖数据池层(数据来源层)。
在编程语言中有一个概念叫函数耦合,所以函数拆分也是解耦的一种,但是它不只是出现在 node 书籍中,而是所有 js 的书籍中都或多或少提及的

Lv6 码匠
on***de JAVA开发工程师 6年前#2
function foo(){
  //do something a
  //do something b
  //do something c
  //....
}
function bar(){
  //do something a
  //do something b
}
function doA(){
   //do something a
}
function doB(){
   //do something b
}
function doC(){
   //do something c
}
function foo(){
  doA();
  doB();
  doC();
}
function bar(){
  doB();
  doC();
}

简单理解就是 函数拆分,每个函数都独立处理和别的函数无关而不是所有的if else 逻辑全都是一个大函数里面

Lv5 码农
15***75 技术总监 6年前#3

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

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,用一个返回假数据的模块,就可以轻松的测试各种数据返回的情况下,“过滤”逻辑的工作状况是否正常了。

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

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取