2011年11月14日星期一

我们的XX项目使用的系统架构

上上个星期五,我们的大头和我们三个核心开发人员开了一个下午的会。决定11月24日,参加一个展览会,推荐我们的产品,也是算是一次了解我们的产品的市场反应的机会。但是这个产品的具体介绍(其实是一个专业软件,加上辅助的硬件系统),我将在正式上市的时候进行详细的说明,可能会在明年的2月份,这个项目的软件部分这里我就暂且称之为XX项目。

这个XX项目已经进行了一年,我从开始就参与开发,作为软件核心开发人员,看到即将上市,感到特别的兴奋,而且有些成就感,特别是这个软件的用户界面还是我一点一滴设计的,和很多程序员不同,我认为设计一个漂亮的GUI是非常有趣的事。

进入正题,今天谈谈这个XX项目系统架构。

开发这个软件我们采取的很多对我们来说比较新的开发方式和架构,我们采用模块化开发,模块设计,所有的模块都通过我们特别设计的类似Service Interface方式导出其数据与功能,所有的模块的接口通过特定的方式进行开放。这些模块都有自己想对应的测试模块,对其进行自动化测试,使用的统一的架构。这些模块我们不仅使用在我这里所提到的XX项目,而且还使用到我参与开发的几个项目,有的是运行在服务器上,有的则是在单机上运行的。

我们使用的架构类似下面所示,XX_GUI模块是用户界面模块。XX_APP(应用程序)获取各种模块的“服务”,这里类似中间层。XX_GUI(用户界面)通过我们特殊定义的event和XX_APP(应用程序)进行通信,目前我们的XX_GUI(用户界面)是使用Qt进行编写的基于单机,但是XX_GUI(用户界面)可以简单的通过替换改变成为Web-based user interfaces(WUI),例如使用Java,AJAX进行开发,如果使用Web-based user interfaces(WUI),并通过各种Web服务协议进行数据和事件通信,XX_APP(应用程序)进行简单的改造就可以放置在服务器上。


XX_GUI
  ^
  | 通过event进行通信 
  |   
XX_APP (应用程序)
  ^
  | 通过统一模块注册机制进行调用
  |
各种模块

 

XX_WEB_GUI
  ^
  | 通过网络进行通信 
  |   
XX_APP (应用程序)
  ^
  | 通过统一模块注册机制进行调用
  |
各种模块

 

进一步延伸,因为各种模块组合产生的XX_APP(应用程序)可以在服务器上运行,我们的XX_APP(应用程序)适用于类似很多大型平台采用的Service-Oriented Architecture(例如亚马逊),可将XX_APP(应用程序)功能作为服务发送给用户。通过统一Service注册机制进行调用多个不同的XX_APP(应用程序),组成一个复杂的网络服务。例如下面所示。这就因为使用同一Service注册机制这就大大提高服务的复用性。这就是在应用程序层级上提高复用性。

                         特定的服务
  ^                                                                        ^
  | 通过统一Service注册机制进行调用 |
  |                                                                          |  
XX_APP_1 (应用程序)    ... ...       XX_APP_n (应用程序)
  ^                                                                        ^
  |  通过统一模块注册机制进行调用         |
  |                                                                          |
各种模块                                           各种模块

 

最后总结一下,复用性一直是我对设计上思考的要点,简单来说:
我们的模块依赖于我们开发的类库,这就是在类层级上的复用
我们的应用程序依赖于我们开发各种模块,这就是在模块的层级上的复用
我们的服务依赖于我们开发各种应用程序,这就是在应用程序的层级上的复用


接下来的时间,为了准备这个展览会,除了设计一个产品演示,准备展位的广告,就是要好好再练一练德语了,突然发现自己的那点德语水平做一个好的产品演示推介非常吃力。

没有评论: