导航架构

导航软件常常用于不同的平台例如wince、Android、ios等,所以为了方便移植,核心功能使用c/c++去实现。

在一个软件中往往因为业务的需要很多功能都是独立的,有些是对于某些不同的厂商独家定制的,暂且称这些功能为非核心功能。为了解决这个问题,需要一个灵活地重用和易扩展的设计。

如何把非核心功能与核心功能解耦,不同的设计有不同的方式。我们采用可插拔模式或者也叫IOC方式。这种方式非常的灵活,当某一个非核心模块不需要时候完全可以去掉,而不影响其他的功能。

实际的设计中我们把非核心模块设计成具有同样接口的库。非核心库接口可以视情况增减(我们使用一个代码生成器去生成),非常的方便增加或减少功能,而不影响到其他功能,甚至二次开发都只需要提供核心即可。

 

 实现代码如下:

LIBRARY "ScreenCapture.dll"

EXPORTS

;FUNC
//下面是需要注册


Init_PlugIn;//初始化该插件
Close_PlugIn;



OnPlugIn_Event_OnPaint_Before;//渲染之前
OnPlugIn_Event_OnPaint_End;//渲染之后


OnPlugIn_Event;//事件

...//事件列表

OnPlugIn_Btn_Start;//按钮事件
OnPlugIn_Btn_End;//按钮事件
OnPlugIn_MouseKeyEvent;//鼠标事件


OnPlugIn_Thread;//插件线程
OnPlugIn_GPS;//实时gps数据

OnMain_Thread;//主线程
OnMain_Timer;//主循环

 

讲完了非核心模块,那么最重要的是核心模块的设计了。在整个架构中我们把核心模块的设计,分为数据中心和事件中心。

1,数据中心

概念:数据中心用于处理各种动态和静态数据。动态数据是指可读写数据,静态数据是只读数据。

在导航系统中,静态数据分为以下部分:
1,地图数据
地图数据主要是地图的经纬度以及对应的属性信息。属性信息包括索引、文字、图片等信息。
2,UI数据
ui由图片和文字构成,以及对应的ui设计数据。
3,字体
4,配置文件
5.其他数据

动态数据

往往是各种用户临时文件,gps实时信息、更新文件,配置文件等等。

在常见的业务处理中,往往只需要某一个当前页面的信息,数据中心会根据当前页面把这些数据给提供给非核心模块。

比如当前ui页码,点击位置,ui元素id等等。map数据是全局的,如果业务逻辑中需要,可以在初始化的时候单独申请。

2,事件中心

事务中心用于响应业务逻辑中的事件。

包括鼠标事件、渲染事件、timer、线程等等

 

数据中心和事件中心的交互往往是由非核心模块来控制完成的,这样就完成了解耦,互相不依赖。

 

posted @ 2016-01-22 17:29  da  阅读(443)  评论(0)    收藏  举报