耦合

最近在看JavaScript设计模式和开发实践,里面说到"设计模式的主题老是把不变的事物和变化的事物分离开",这就涉及到了解耦.耦合是一个很宽泛的概念,在此只为记录在js中出现的各类类型的耦合.
数据耦合:一个模块访问另外一个模块时,彼此之间是经过简单的数据参数(不是控制参数/公共数据结构/外部变量)来交换输入输出信息的.网上搜到的解释,不是很懂!设计模式

function create(id) {
  var box = document.createElement('div');
  box.setAttribute('id', id);
  return box;
}
function append(id) {
  var box = create(id);
  document.body.appendChild(box);
}

此处的耦合是由于append函数访问了create函数.
解决方案:数据结构

create函数不变,
function append(obj) {
  document.body.appendChild(obj);
}
var box = create(id);
append(box);

控制耦合:若是一个模块经过传送开关/标志/名字等控制信息,明显地控制选择另外一模块的功能,就是控制耦合.网上搜到的解释,不是很懂!app

var y = 1;
function a(x) {
  if (x) {
    y = 1;
  } else {
    y = 0;
  }
}

function b() {
  if (y == 1) {
    console.log('y is 1');
  } else {
    console.log('y is 0');
  }
}

解决方案:
1.将被调用模块内的断定上移到调用模块中进行函数

干掉var y = 1;和函数b
function a(x) {
  if (x) {
    console.log('y is 1');
  } else {
    console.log('y is 0');
  }
}

2.被调用模块分解成若干单一功能的模块
内容耦合:当一个模块直接修改或者操做另外一个模块的数据,或者直接转入另外一个模块时,就发生了内容耦合.此时,被修改的模块彻底依赖于修改它的模块.额额额,下面的例子和数据耦合的例子有啥不一样???设计

function a() {
  return 'kk';
}
function b() {
  alert(a());
}
b();

解决方案:code

a函数不变
function b(p1) {
  alert(p1);
}
b(a());

还有 标记耦合 非直接耦合 外部耦合 公共耦合,这些都没有在网上找到合适的js的例子,但愿你们补充!ip

相关文章
相关标签/搜索