我必須實現一個存儲庫模式對象,該對象將維護項目列表。回購看起來是這樣的:在JavaScript中,依靠對象引用來「聆聽」更改是否是一種很好的做法?
var repository = {
data: [],
getAll: function() {
return this.data;
},
update: function() { ... }
}
回購數據的最終消費者將是某個組件。我想利用以更新DOM時,它改變了參考回購的數據數組:
function ItemList() {
this.data = repository.getData();
when (this.data is changed) {
update the view
}
this.userInput = function() {
repository.update();
}
}
雖然感覺整潔,據說採用的是合法的功能,是不是真的是一個好主意?我應該在儲存庫中使用觀察員/通知嗎?
var repository = {
...
onDataChange: function(callback) { ... }
}
一個例子(使用角),你可以在這裏找到:http://jsfiddle.net/xen8m148/
我懷疑OP試圖使用'repository'就像一個數據存儲。在這種情況下,不存在真正的數據耦合問題,因爲存儲庫實際上不在數據上運行,也不依賴於數據。 – light
我永遠不會相信事情是他們的名字所說的,所以:即使它被稱爲「存儲庫」,我也不會相信沒有人會最終不讓它操縱數據本身,及時。最好先清楚這些事情(注意,OP把它稱爲存儲庫模式 - *像*對象,而不是存儲庫。這總是令人擔憂) –
您有一點,但我認爲這是一個架構問題。如果應用程序使用「存儲庫」是用於存儲數據的層之一(也許對磁盤持久存儲)的體系結構進行建模,)而沒有別的,我們希望它不會操縱數據。 – light