從底層資料庫遷移看CQRS的好處

brighthas發表於2013-11-29
CQRS的好處是,底層持久化更改,領域層無需更改任何程式碼。

CQRS是什麼,我這裡不多說了,下面把我個人的電子書系統的遷移案例,來看一下CQRS的優勢。

我們很看中CQRS,有時候就是這樣,不明也要認為好,但到底真的那裡好?

ebook系統後臺底層是 mongodb , 我想用七牛代替部分,部分也就是大資料體,mongodb只儲存用於 query的欄位,你懂的。

我採用CQRS的JSDM框架開發,這個框架不過多介紹

程式碼如下是領域層事件監聽檔案部分程式碼:

function e1(repos, services) {
    function handle(NAME, data) {
        tinydb.save(NAME, data, function () {
        });
    }

    handle.eventName = "*.*.create"
    return handle;
}
<p class="indent">


這裡要說明的是,這個檔案不在領域層,而是應用層,應用層監聽領域層事件,這個監聽的是領域Aggre物件建立的事件,不要以為系統就是簡單的CURD,這裡為了方便而引用了 create 事件而已。

我們發現 tinydb.save 是用來儲存的,只要代替這個方法就可改變底層持久化方式。

那麼,領域層如何獲得Aggre例項呢,我這裡沒有用事件回溯,只是簡單查詢資料。

如果改變了底層持久化,那麼領域層的 getID 也要改變,那隻要更改如下程式碼即可。

但這次要更改領域層的程式碼了:

var domain = require("jsdm")();
// 更改 dbs.get 即可
domain.register("get",dbs.get).seal();

<p class="indent">


只要更改 dbs.get 即可,這是個介面。這個介面形式如下:

 function(type, id, cb) {
   // 實現程式碼
 }
<p class="indent">


修改這兩處即可,領域層程式碼無需改動任何程式碼。


[該貼被brighthas於2013-11-29 22:10修改過]

相關文章