耦合

最近在看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

相關文章
相關標籤/搜索