This commit is contained in:
coco
2026-07-03 16:05:30 +08:00
commit df489d5640
1101 changed files with 779140 additions and 0 deletions
@@ -0,0 +1,243 @@
# 代码结构
<cite>
**本文档引用的文件**
- [GeoMative.cpp](file://cpp/Main/GeoMative.cpp)
- [Global.cpp](file://cpp/Main/Global.cpp)
- [Constant.h](file://h/Constant.h)
- [GeoMative.h](file://h/GeoMative.h)
- [DevManager.cpp](file://cpp/Managers/DevManager.cpp)
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
- [DataOperator.cpp](file://cpp/Operator/DataOperator.cpp)
- [Project.h](file://h/Project.h)
- [Device.h](file://h/Device.h)
- [Script.h](file://h/Script.h)
- [MainFrm.cpp](file://cpp/Views/MainFrm.cpp)
- [MainFrm.h](file://h/MainFrm.h)
</cite>
## 目录
1. [项目结构概述](#项目结构概述)
2. [核心模块职责划分](#核心模块职责划分)
3. [应用程序对象与管理器协调](#应用程序对象与管理器协调)
4. [常量与枚举的广泛应用](#常量与枚举的广泛应用)
5. [模块间调用关系示例](#模块间调用关系示例)
6. [系统架构图](#系统架构图)
## 项目结构概述
GeomativeStudio项目的代码结构清晰地划分为多个目录,每个目录承担特定的职责。`cpp``h`目录下分别存放C++源文件和头文件,其子目录体现了系统的分层架构。`Main`目录包含应用程序入口和全局对象;`Managers`目录包含设备、项目、脚本、测试数据和I/O管理器等核心业务逻辑组件;`Operator`目录包含具体操作实现;`ProblemZone`目录包含项目、设备、脚本点等核心数据模型;`Views`目录包含所有UI视图和对话框实现。
**Section sources**
- [GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L1-L800)
- [Global.cpp](file://cpp/Main/Global.cpp#L1-L800)
## 核心模块职责划分
### Main目录
`Main`目录是应用程序的入口点,主要包含`GeoMative.cpp``Global.cpp`两个核心文件。`GeoMative.cpp`定义了`CGeoMativeApp`类,该类继承自`CWinApp`,负责应用程序的初始化、运行和退出。它在`InitInstance`方法中创建并初始化所有核心管理器对象,并建立与数据库的连接。`Global.cpp`则定义了全局变量和函数,如`theApp`全局应用程序对象实例、`aDevLinkTable`设备链接表以及各种工具函数。
### Managers目录
`Managers`目录包含了系统的核心业务逻辑组件,即各种管理器(Manager)。这些管理器负责处理特定领域的业务逻辑和数据持久化。
- **DevManager**:设备管理器,负责管理所有设备的生命周期,包括设备的注册、连接、状态更新和信息获取。它通过`m_devLinkList`链表维护所有设备对象,并提供`GetDevice``GetDeviceByID`等方法来检索设备。
- **ProManager**:项目管理器,负责管理项目(Project)和测区(TestingZone)的层次结构。它通过`m_dmsLinkList`链表管理数据管理结构(DMS),并提供`ShowProList``ShowTzList`等方法来展示项目和测区列表。
- **SptManager**:脚本管理器,负责管理脚本(Script)的创建、加载和同步。
- **TdManager**:测试数据管理器,负责管理测试数据(Testing Data)的存储和检索。
- **ExecManager**:执行管理器,负责管理执行任务和流程。
- **IOManager**I/O管理器,负责处理输入输出操作。
**Section sources**
- [DevManager.cpp](file://cpp/Managers/DevManager.cpp#L1-L200)
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L1-L200)
### Operator目录
`Operator`目录包含了具体操作的实现类。这些类通常封装了复杂的业务逻辑或与外部系统的交互。例如,`DataOperator.cpp`实现了数据操作相关的功能,如文件导入导出、数据同步等。`DevOperator.cpp``SptOperator.cpp`则分别处理设备和脚本的具体操作。
### ProblemZone目录
`ProblemZone`目录包含了系统的核心数据模型,这些模型代表了业务领域中的实体。
- **Project**:项目类,继承自`CDataMngStruct`,代表一个工程项目,包含项目名称、描述、位置等属性。
- **Device**:设备类,代表一个物理设备,包含设备序列号、型号、软硬件版本、MAC地址等属性,并提供与设备通信的方法。
- **Script**:脚本类,代表一个测量脚本,包含电极数量、测量类型等属性,并提供显示脚本内容和详情的方法。
- **TestingZone**:测区类,代表项目下的一个具体测量区域。
**Section sources**
- [Project.h](file://h/Project.h#L1-L41)
- [Device.h](file://h/Device.h#L1-L128)
- [Script.h](file://h/Script.h#L1-L39)
### Views目录
`Views`目录包含了所有用户界面(UI)的实现,包括主框架窗口、各种管理窗口和对话框。
- **MainFrm**:主框架窗口,是应用程序的主界面,负责管理MDI子窗口的创建和布局。
- **devmngframe**:设备管理框架,用于显示和管理设备。
- **datamngframe**:数据管理框架,用于显示和管理项目、测区和测试数据。
- **sptmngframe**:脚本管理框架,用于显示和管理脚本。
- **各种对话框**:如`DailLogin`(登录对话框)、`OpCreateProjectDlg`(创建项目对话框)等,用于用户交互。
**Section sources**
- [MainFrm.cpp](file://cpp/Views/MainFrm.cpp#L1-L200)
- [MainFrm.h](file://h/MainFrm.h#L1-L120)
## 应用程序对象与管理器协调
`CGeoMativeApp`应用程序对象是整个系统的协调中心。它在`InitInstance`方法中创建并初始化所有核心管理器对象,并将它们作为成员变量存储。这些管理器通过`m_pConnection`共享同一个数据库连接,确保了数据的一致性。
```mermaid
classDiagram
class CGeoMativeApp {
+CDevManager* m_pDevManager
+CTdManager* m_pTdManager
+CProManager* m_pProManager
+CExecManager* m_pExecManager
+CSptManager* m_pSptManager
+CIOManager* m_pIOManager
+_ConnectionPtr m_pConnection
+InitInstance() bool
+ExitInstance() int
}
class CDevManager {
+CLinkList<CDevice*> m_devLinkList
+_ConnectionPtr m_pConnection
+GetDevice(DWORD) CDevice*
+InitialDevLinkList() void
}
class CProManager {
+CLinkList<CDataMngStruct*> m_dmsLinkList
+_ConnectionPtr m_pConnection
+GetDMS(DWORD) CDataMngStruct*
+ShowProList(DWORD, CListCtrl&) bool
}
class CDevice {
+DWORD m_dwID
+UINT m_uState
+CString m_szDevSN
+CString m_szMacAddress
+_ConnectionPtr m_pConnection
+GetDevInfo() bool
+Reset() bool
}
class CProject {
+DWORD m_dwID
+CString m_szPRname
+CString m_szDesc
+_ConnectionPtr m_pConnection
+ShowDetailInfo(CListCtrl&) bool
}
CGeoMativeApp --> CDevManager : "拥有"
CGeoMativeApp --> CProManager : "拥有"
CGeoMativeApp --> CDevice : "通过m_pDevManager访问"
CGeoMativeApp --> CProject : "通过m_pProManager访问"
CDevManager --> CDevice : "管理"
CProManager --> CProject : "管理"
CDevManager --> _ConnectionPtr : "使用"
CProManager --> _ConnectionPtr : "使用"
CGeoMativeApp --> _ConnectionPtr : "拥有"
```
**Diagram sources**
- [GeoMative.h](file://h/GeoMative.h#L115-L182)
- [DevManager.h](file://h/DevManager.h#L16-L68)
- [ProManager.h](file://h/ProManager.h#L30-L76)
- [Device.h](file://h/Device.h#L33-L127)
- [Project.h](file://h/Project.h#L16-L40)
## 常量与枚举的广泛应用
`Constant.h`头文件定义了系统中广泛使用的常量和枚举,为代码提供了清晰的语义和类型安全。
- **语言常量**`LANG_ZHCN``LANG_ENUS`用于标识当前用户界面语言。
- **状态常量**`PZ_STATE_OFFLINE``PZ_STATE_ONLINE`等用于表示设备、项目等实体的状态。
- **样式常量**`PZ_STYLE_PRO``PZ_STYLE_TZ``PZ_STYLE_DEV`等用于区分不同类型的实体。
- **枚举**`EN_TRANSFER_FILE_METHOD`枚举定义了文件传输方式(COM、USB、云端、WiFi),`EN_CHANNEL_INFO`枚举定义了通道信息(单通道、多通道)。
这些常量和枚举在系统各处被引用,例如在`CGeoMativeApp``InitInstance`方法中,根据`g_iTransFileMode`(其值来自`EN_TRANSFER_FILE_METHOD`)决定初始化不同的网络连接逻辑。
**Section sources**
- [Constant.h](file://h/Constant.h#L1-L266)
## 模块间调用关系示例
用户操作通过UI层触发Manager层的业务逻辑处理,这是一个典型的模块间调用流程。以用户在主界面点击“设备管理”菜单为例:
1. **UI层 (Views)**`MainFrm.cpp`中的`OnMngDevWin`消息处理函数被调用。
2. **协调层 (Main)**`OnMngDevWin`函数负责创建或激活`CDevMngFrame`设备管理窗口。
3. **业务逻辑层 (Managers)**`CDevMngFrame`在初始化时,会调用`CGeoMativeApp`的全局实例`theApp`中的`m_pDevManager`管理器的`ShowTzList``GetDevice`等方法来获取设备数据。
4. **数据模型层 (ProblemZone)**`CDevManager`通过其`m_devLinkList`链表或直接查询数据库,获取`CDevice`对象的数据。
5. **返回UI层**:获取的数据被返回给`CDevMngFrame`,并在其UI控件(如`CListCtrl`)中显示。
```mermaid
sequenceDiagram
participant User as 用户
participant MainFrm as MainFrm.cpp
participant DevMngFrame as CDevMngFrame
participant DevManager as CDevManager
participant Device as CDevice
User->>MainFrm : 点击“设备管理”
MainFrm->>DevMngFrame : 创建/激活设备管理窗口
DevMngFrame->>DevManager : 调用ShowTzList(dwProHandle, tzList)
DevManager->>DevManager : 查询数据库获取测区列表
DevManager->>Device : 通过m_devLinkList.Find()获取设备
Device-->>DevManager : 返回CDevice对象
DevManager-->>DevMngFrame : 返回测区和设备数据
DevMngFrame-->>MainFrm : 在UI上显示数据
MainFrm-->>User : 显示设备管理界面
```
**Diagram sources**
- [MainFrm.cpp](file://cpp/Views/MainFrm.cpp#L58-L94)
- [DevManager.cpp](file://cpp/Managers/DevManager.cpp#L48-L80)
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L53-L92)
## 系统架构图
```mermaid
graph TD
subgraph "UI层 (Views)"
A[MainFrm]
B[CDevMngFrame]
C[CDataMngFrame]
D[对话框]
end
subgraph "协调层 (Main)"
E[CGeoMativeApp]
end
subgraph "业务逻辑层 (Managers)"
F[CDevManager]
G[CProManager]
H[CSptManager]
I[CTdManager]
end
subgraph "数据模型层 (ProblemZone)"
J[CDevice]
K[CProject]
L[CScript]
M[CTestingZone]
end
subgraph "数据访问层"
N[数据库]
end
A --> E
B --> E
C --> E
D --> E
E --> F
E --> G
E --> H
E --> I
F --> J
G --> K
G --> M
H --> L
F --> N
G --> N
H --> N
I --> N
J --> N
K --> N
L --> N
M --> N
```
**Diagram sources**
- [GeoMative.cpp](file://cpp/Main/GeoMative.cpp#L56-L67)
- [DevManager.h](file://h/DevManager.h#L63-L65)
- [ProManager.h](file://h/ProManager.h#L72-L73)
- [Project.h](file://h/Project.h#L24)
- [Device.h](file://h/Device.h#L103)