一种采用消息框架切分扩展的设计方法

原创
2012/04/06 13:19
阅读数 359

anthor addr:http://www.cppblog.com/cdy20/archive/2012/04/06/170252.html

                                                                                                    Lastupdate201246 蔡东赟

http://www.LomoX.hk社区发布。

ps:blog贴不了图啊,可以再附件下载:一种采用消息框架切分扩展的设计方法

 

传统的界面uiuilogic隔离方式采用的是接口的方式,为了解耦合,为了使隔离层之间业务统一。如图,ui层你就负责界面的,你想用什么语言都可以; uilogic层你就只做ui传下来的io,键盘鼠标等的操作行为解析; applogic你就负责业务,计算执行的任务。这样子,一个需求就可以同时三个人开发了。 

        

 

 

 

大型基础软件为了解耦而做的隔离,导致接口声明膨胀。可以看到applogic层和uilogic的接口会无限膨胀,与其带来的就是维护成本,如果是内部定义的接口,书写的时候你要每个层都提供一份声明。

         最近在想提供一个东西做为隔离层,先看图。

 


      Applogic uilogic就只有数据间的通讯了。采用异步的消息方式,不管你是多线程还是单线程。模块之间耦合彻底消失。有人会问你这个service用啥。

Zeromq吧,这是我机器上面测试的速度

http://www.cppblog.com/cdy20/archive/2012/04/01/169791.html  单线程一百w120s,那个快啊,如果作为本地的派发器的服务端足够了。

      通信数据如何处理呢?zeromq采用的是字符串发送,我们可以配合googleprotobuf定义解析协议数据。这个东西可以压缩,解压缩协议非常方便,配上这个高速度的mq,那简直棒极了。

 

Zeromq作为一个可以内核间、跨进程、跨机器通信的消息队列,不免又为我们提供了更多的设计的想象力。这么一个中间的消息的服务器,我们又可以把applogic切割,分成多个独立模块,如图。

 

 


如上图,我们可以不断拓展
applogic的模块,我们可以认为这些模块是独立的 动态链接库,独立的进程都可以,或者是独立线程,一切通信 进出都是通过发送send,接收recv

这个东西我现在遇到的工程项目组就有这个需求,他们要求是能够并发开发,甚至两个人统一个模块不四个分支同时进行。一个强大的消息框架,让我的模块可以成为任何一种定义。

画个圈圈,归纳一下:



 上图红色圈圈代表bus。

       上图抽象的图如下。

 

 

 

这样程序就可以任意扩展了。任意切分了。

 

         有错误和改进方法,请发到caidongyun19@qq.com.谢谢阅读。

共享促进技术发展。蔡东赟。www.lomox.hk


附上提醒:

对待本框架,个人:建议团队自由度不要太高,需要根据团队项目的特点做一定的规范约束。否则将面临质量和维护成本递增。

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部