hunting/doc/design.md
2023-07-13 22:42:04 +08:00

80 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1. 设计文档
## 1.1. 产品概述
## 1.2. 结构设计
1. 迷彩外观;
2. 抽屉式电池箱组;
3. 捆绑/相机支架安装方式;
4. 案件翻盖保护;
5. 可拓展4G模块
6. 户外防水;
## 1.3. 硬件设计
### 1.3.1. 关键外设
1. 摄像头;
2. PIR sensor
3. IR leds
4. 电池(箱体);
5. 启动模式拨键(三键);
6. 按键:同步/复位/格式化;
7. SD card
8. usb接口
9. NFC绑定APP
10. 光感传感器:白天/黑夜;
11. 指示灯:设备状态/SD卡状态/电量/无线信号灯/账号状态;
### 1.3.2. 生产测试/研发调试
## 1.4. 软件设计
### 1.4.1. 多态单例设计模式
   多态单例模式包含两部分:抽象接口 + 抽象接口实例,代码基于抽象接口存在,业务基于抽象接口实例存在。
#### 1.4.1.1. 多态单例图示
   下述图示分别为:类图 / 依赖关系图 / 编译链接关系图
```mermaid
classDiagram
APP --> AbstractInterface:使用
AbstractInterface <|.. Instance:实现
应用 --> 抽象接口库:依赖
抽象接口库 ..> 实例库:依赖
main线程 --> 抽象接口代码库:链接
main线程 --> 实例代码库:链接
```
#### 1.4.1.2. 多态单例模块使用时序图
&emsp;&emsp; 在使用多态单例设计模式开发功能模块时,使用统一的命名规则:
* 抽象接口命名xxx + Abstract例如libLogAbstract.a;
* 实例库命名xxx + 具体实例名称例如libLogEasylogging.a
**调用关系如下图**
```mermaid
sequenceDiagram
User ->> +libLogAbstract.a:调用抽象接口
libLogAbstract.a --> +libLogEasylogging.a:实际调用实例接口
libLogEasylogging.a --> -libLogAbstract.a:return
libLogAbstract.a -->> -User:return
```
**只有main函数实际调用实例库的实例化接口时log功能才会生效。**
#### 1.4.1.3. 多态单例总结:
1. 应用代码只使用抽象接口,禁止直接依赖实例代码;
2. 应用代码只有在main线程初始化时实例化实例模块即可
3. 多态单例模块由两个库组成,一个是抽象接口库,一个是实例代码库,支持静态多态和动态多态;
### 1.4.2. 根据软件模块作用域分层
#### 1.4.2.1. 工具库utils
##### 1.4.2.1.1. 工具库概述
&emsp;&emsp; 工具库是功能单一的不依赖任何三方库的独立库必须提供C语言接口内部实现不限于C或者C++。
##### 1.4.2.1.2. 日志库
###### 1.4.2.1.2.1. 日志库概述
&emsp;&emsp; 提供程序的日志管理功能,含日志的实时打印/保存/跟踪(实时上传云端)。
###### 1.4.2.1.2.2. 日志库设计模式
&emsp;&emsp; C语言接口的多态单例模式可动态/静态加载多态实例。