config design.
This commit is contained in:
parent
aa635a3001
commit
7a0490b689
|
@ -30,9 +30,11 @@
|
|||
## 1.4. 软件设计
|
||||
|
||||
### 1.4.1. 多态单例设计模式
|
||||
|
||||
   多态单例模式包含两部分:抽象接口 + 抽象接口实例,代码基于抽象接口存在,业务基于抽象接口实例存在。
|
||||
|
||||
#### 1.4.1.1. 多态单例图示
|
||||
|
||||
   下述图示分别为:类图 / 依赖关系图 / 编译链接关系图
|
||||
```mermaid
|
||||
classDiagram
|
||||
|
@ -44,6 +46,7 @@ classDiagram
|
|||
main线程 --> 实例代码库:链接
|
||||
```
|
||||
#### 1.4.1.2. 多态单例模块使用时序图
|
||||
|
||||
   在使用多态单例设计模式开发功能模块时,使用统一的命名规则:
|
||||
* 抽象接口命名:xxx + Abstract,例如:libLogAbstract.a;
|
||||
* 实例库命名:xxx + 具体实例名称,例如:libLogEasylogging.a;
|
||||
|
@ -59,6 +62,7 @@ libLogAbstract.a -->> -User:return
|
|||
**只有main函数实际调用实例库的实例化接口时,log功能才会生效。**
|
||||
|
||||
#### 1.4.1.3. 多态单例目录结构规范
|
||||
|
||||
   根据多态单例设计模式,指定使用多态单例模式开发的模块的源码目录结构,耦合思路清晰。
|
||||
```
|
||||
└── Log // 多态单例模式模块的目录
|
||||
|
@ -73,6 +77,7 @@ libLogAbstract.a -->> -User:return
|
|||
   构建时把abstract目录和src目录的源码分别编译成库,main线程根据实际需要链接并实例化即可。
|
||||
|
||||
#### 1.4.1.4. 多态单例总结:
|
||||
|
||||
1. 应用代码只使用抽象接口,禁止直接依赖实例代码;
|
||||
2. 应用代码只有在main线程初始化时实例化实例模块即可;
|
||||
3. 多态单例模块由两个库组成,一个是抽象接口库,一个是实例代码库,支持静态多态和动态多态;
|
||||
|
@ -83,11 +88,13 @@ libLogAbstract.a -->> -User:return
|
|||
#### 1.4.2.1. 应用层(application)
|
||||
|
||||
##### 1.4.2.1.1. 应用层概述
|
||||
|
||||
   应用层负责处理产品级的复杂业务关系,是产品功能的直接体现,应用层模块全部使用C++接口的多态单例模式设计,各模块之间可以互相调用接口,应用层各库可以随意任意调用中间件或者工具类接口。
|
||||
|
||||
##### 1.4.2.1.2. 网络服务模块
|
||||
|
||||
###### 1.4.2.1.2.1. 网络服务概述
|
||||
|
||||
   根据产品联网属性,网络服务模块分为不联网 / 联网(B端)/ 联网(自研)三个多态属性。联网时,IPC的图片 / 视频资源通过网络服务器进行管理。
|
||||
|
||||
1. 不联网版本:网络服务模块不实例化即可;
|
||||
|
@ -95,11 +102,13 @@ libLogAbstract.a -->> -User:return
|
|||
3. 联网(自研):媒体资源由自研服务器管理;
|
||||
|
||||
###### 1.4.2.1.2.2. 网络服务多态设计模式
|
||||
|
||||
   通过构建配置文件选择需要实例化的网络服务模块代码。
|
||||
|
||||
#### 1.4.2.2. 中间件(middleware)
|
||||
|
||||
##### 1.4.2.2.1. 中间件概述
|
||||
|
||||
   一些相对中性的业务功能库,这些库可以提供给不同的产品需求使用,在应用层不同的调用方式可实现不同的产品功能。中间件只能被应用层调用或者向下调用适配层或者调用工具库,中间件各模块之间不能互相调用。中间件库接口可以使用C或者C++接口。
|
||||
|
||||
##### 1.4.2.2.2. 外设管理模块
|
||||
|
@ -111,8 +120,28 @@ libLogAbstract.a -->> -User:return
|
|||
   应用层唯一的摄像头接口库。
|
||||
|
||||
##### 1.4.2.2.4. MCU管理模块
|
||||
|
||||
   单片机通信接口库。
|
||||
|
||||
##### 1.4.2.2.5. IPC配置库
|
||||
|
||||
   负责管理IPC产品相关的配置数据。
|
||||
|
||||
**基本功能**
|
||||
|
||||
1. 敏感数据(例如:账号 / 密码)需要加密处理;
|
||||
2. 读到内存使用二进制数据,缓存到数据结构体;
|
||||
3. 调用utils工具里面的配置库,对配置文件进行读 / 写;
|
||||
4. 使用二进制结构体 + 明文配置文件结合的模式,既可减少内存消耗,又可以规避二进制数据升级迭代数据匹配困难问题;
|
||||
|
||||
##### 1.4.2.2.6. 高级配置库
|
||||
|
||||
   对配置库的二级封装,提供更便捷的功能服务,例如:可以监控文件的修改事件 / 可以直接捕获某个配置文件或者数据的操作对象。
|
||||
|
||||
###### 1.4.2.2.6.1. 高级配置库设计
|
||||
|
||||
   对外暴露C++接口,使用多态单例设计模式。
|
||||
|
||||
#### 1.4.2.3. 适配层(hal)
|
||||
|
||||
#### 1.4.2.4. 工具库(utils)
|
||||
|
@ -162,6 +191,11 @@ libLogAbstract.a -->> -User:return
|
|||
|
||||
   对外提供C语言接口,内部不局限使用C或者C++。
|
||||
|
||||
**基本功能**
|
||||
|
||||
1. 使用三方库保存明文格式的配置文件到文件系统;
|
||||
2. 可注册回调函数,监听文件的操作事件;
|
||||
|
||||
###### 1.4.2.4.5.3. 开源库
|
||||
|
||||
###### 1.4.2.4.5.4. 备份机制
|
||||
|
|
Loading…
Reference in New Issue
Block a user