CQRS如何实现读写分离

12-12-20 thinkjava
                   

最近在看CQRS,找了一个DEMO,没有理解CQRS的读写分离体现在哪里?是指应用程序在写入和读取操作上分开的读写分离,还是指写入数据的DB和读取数据的DB分开这个层面的读写分离,如果是前者,那意义没有多大呀,仅仅是写操作和读操作在程序上分离了,降低了两个逻辑之间的耦合,这个意义不大呀,如果是后者,那么我没有看到Write DB和Read DB,只看到整个只有一个DB,写的时候,由一个EventHandler负责将数据写入,比如写入DB1,读取的时候,直接读DB1,这有什么意义呢?在这样的架构下,读操作又如何优化呢?

                   

13
banq
2012-12-20 11:41

晕,两件事分开了还不是一件好事,分而治之啊。

如果混在一起,进行读优化时还要顾及写操作,顾此失彼。

参考一下伸缩性相关讨论吧。

thinkjava
2012-12-20 11:54

2012-12-20 11:41 "@banq"的内容
如果混在一起,进行读优化时还要顾及写操作,顾此失彼。 ...

读和写混在一起,也可以优先呀,怎么会顾此失彼呢,比如,我有一个DAO,里面有写方法,也有读方法,如果写方法慢,我就想办法优化写方法,如果读方法慢,我就优化读方法,怎么会互相有影响呢?

banq
2012-12-20 12:23

这样做违背单一职责的编程原则,一个类只可以实现一个方面职责。如果你在一个类中实现两个以上职责,就应该分离它们。

dao只是简单系统下一个简单对付办法,就像小公司老板可能什么都做,但是做大了需要分工一样。

当你在简单dao中增加各种优化代码,实际是增加新的职责。至少要用装饰器模式。而读写分开装饰是必然。再自己好好想想实践实践。

banq
2012-12-20 12:23

这样做违背单一职责的编程原则,一个类只可以实现一个方面职责。如果你在一个类中实现两个以上职责,就应该分离它们。

dao只是简单系统下一个简单对付办法,就像小公司老板可能什么都做,但是做大了需要分工一样。

当你在简单dao中增加各种优化代码,实际是增加新的职责。至少要用装饰器模式。而读写分开装饰是必然。再自己好好想想实践实践。

9Go 1 2 3 4 ... 9 下一页