一种采用消息框架切分扩展的设计方法
Lastupdate:2012年4月6日 蔡东赟
http://www.LomoX.hk社区发布。
ps:blog贴不了图啊,可以再附件下载:一种采用消息框架切分扩展的设计方法
传统的界面ui和uilogic隔离方式采用的是接口的方式,为了解耦合,为了使隔离层之间业务统一。如图,ui层你就负责界面的,你想用什么语言都可以; uilogic层你就只做ui传下来的io,键盘鼠标等的操作行为解析; applogic你就负责业务,计算执行的任务。这样子,一个需求就可以同时三个人开发了。
大型基础软件为了解耦而做的隔离,导致接口声明膨胀。可以看到applogic层和uilogic的接口会无限膨胀,与其带来的就是维护成本,如果是内部定义的接口,书写的时候你要每个层都提供一份声明。
最近在想提供一个东西做为隔离层,先看图。
Applogic和 uilogic就只有数据间的通讯了。采用异步的消息方式,不管你是多线程还是单线程。模块之间耦合彻底消失。有人会问你这个service用啥。
用Zeromq吧,这是我机器上面测试的速度
http://www.cppblog.com/cdy20/archive/2012/04/01/169791.html 单线程一百w条120s,那个快啊,如果作为本地的派发器的服务端足够了。
通信数据如何处理呢?zeromq采用的是字符串发送,我们可以配合google的protobuf定义解析协议数据。这个东西可以压缩,解压缩协议非常方便,配上这个高速度的mq,那简直棒极了。
Zeromq作为一个可以内核间、跨进程、跨机器通信的消息队列,不免又为我们提供了更多的设计的想象力。这么一个中间的消息的服务器,我们又可以把applogic切割,分成多个独立模块,如图。
如上图,我们可以不断拓展applogic的模块,我们可以认为这些模块是独立的 动态链接库,独立的进程都可以,或者是独立线程,一切通信 进出都是通过发送send,接收recv。
这个东西我现在遇到的工程项目组就有这个需求,他们要求是能够并发开发,甚至两个人统一个模块不四个分支同时进行。一个强大的消息框架,让我的模块可以成为任何一种定义。
画个圈圈,归纳一下:
上图红色圈圈代表bus。
上图抽象的图如下。
这样程序就可以任意扩展了。任意切分了。
有错误和改进方法,请发到caidongyun19@qq.com.谢谢阅读。
共享促进技术发展。蔡东赟。www.lomox.hk
附上提醒:
对待本框架,个人:建议团队自由度不要太高,需要根据团队项目的特点做一定的规范约束。否则将面临质量和维护成本递增。
from lomox li:
如果仅仅是做进程间通信,那是大材小用了
如果是进程内的线程间通信,就不合适
客户端面临的问题是消息中心在进程间和线程间的通信
posted on 2012-04-06 11:13
爬 阅读(1901)
评论(4) 编辑 收藏 引用 所属分类:
个人框架设计