从底层数据库迁移看CQRS的好处

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;
}

这里要说明的是,这个文件不在领域层,而是应用层,应用层监听领域层事件,这个监听的是领域Aggre对象创建的事件,不要以为系统就是简单的CURD,这里为了方便而引用了 create 事件而已。

我们发现 tinydb.save 是用来储存的,只要代替这个方法就可改变底层持久化方式。

那么,领域层如何获得Aggre实例呢,我这里没有用事件回溯,只是简单查询数据。

如果改变了底层持久化,那么领域层的 getID 也要改变,那只要更改如下代码即可。

但这次要更改领域层的代码了:

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

只要更改 dbs.get 即可,这是个接口。这个接口形式如下:

 function(type, id, cb) {
   // 实现代码
 }

修改这两处即可,领域层代码无需改动任何代码。

[该贴被brighthas于2013-11-29 22:10修改过]

大哥,

这和CQRS有关系吗? 这是面向接口的好处。