如何使JS代碼達到低耦合,高內聚?

最近在寫代碼的時候已經慢慢的開始習慣使用了匿名對象和閉包。不過慢慢的開始發現代碼的耦合度太高了,按我的理想是

var app = (function() {
//全局對象
var default = {
aa: "",
bb: "",
cc: ""
}
var a = function() {
//公共函數
}
var b = function() {
//公共函數
}
var c = function() {
//公共函數
}

return {
init: function() {
a();
b();
c();
}
}
}());
app.init();

可現實是 a b c三個函數在內部相互作用的次數太多了很少有辦法達到解耦,請問在那種 需要重複利用函數各位是如何處理的?


a,b,c是app的私有調用,從你的寫法看,它們是對一組操作的切分,看起來並不像獨立的模塊,沒有必要為了解耦而解耦。有依賴並不一定意味著高耦合,你的寫法對app的外部隱藏了a,b,c的內部,恰恰是高內聚的代碼。

高耦合是「模塊之間」不該有的直接調用和依賴,一個模塊「主動」和其他模塊交互,這個時候才需要解耦。JS的解耦技巧,請看 https://speakerdeck.com/addyosmani/building-decoupled-large-scale-applications-using-javascript-and-jquery

解耦的過程簡單地說就是


一個簡單原則,把你的程序,分解成各個名詞和動詞,名詞抽象成「類」, 動詞抽象成類的「方法」。


首先你要能預測需求,這樣才能做出好的設計,當然這顯然不是一般碼農能做到的,主要是你的代碼是否具有可重構性,而一般的js代碼顯然是做不到的,所以歡迎加入我軟的大typescript陣營,寫出可以重構的代碼。


//輕噴
var App = function(initData) {

var data = {
aa: "default_aa",
bb: "default_bb",
cc: "default_cc"
}

var init = function() {
$.extend(data, initData);
}

this.a = function() {
//公共函數
return data.aa;
}

this.b = function() {
//公共函數
return data.bb;
}

this.c = function() {
//公共函數
return data.cc;
}

init();
};

var app = new App({
aa: "aa",
bb: "bb"
});

console.log(
app.a(), app.b(), app.c() //aa bb default_cc
);


推薦閱讀:

Flex布局完全指南
Vue.js 實用技巧(二)
極樂技術周報(第二十八期)
Web Components 在 GitHub 中的應用

TAG:前端開發 | JavaScript | jQuery |