导航架构
导航软件常常用于不同的平台例如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、线程等等
数据中心和事件中心的交互往往是由非核心模块来控制完成的,这样就完成了解耦,互相不依赖。

浙公网安备 33010602011771号