10 KiB
代码结构
**本文档引用的文件** - [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)目录
项目结构概述
GeomativeStudio项目的代码结构清晰地划分为多个目录,每个目录承担特定的职责。cpp和h目录下分别存放C++源文件和头文件,其子目录体现了系统的分层架构。Main目录包含应用程序入口和全局对象;Managers目录包含设备、项目、脚本、测试数据和I/O管理器等核心业务逻辑组件;Operator目录包含具体操作实现;ProblemZone目录包含项目、设备、脚本点等核心数据模型;Views目录包含所有UI视图和对话框实现。
Section sources
核心模块职责划分
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
Operator目录
Operator目录包含了具体操作的实现类。这些类通常封装了复杂的业务逻辑或与外部系统的交互。例如,DataOperator.cpp实现了数据操作相关的功能,如文件导入导出、数据同步等。DevOperator.cpp和SptOperator.cpp则分别处理设备和脚本的具体操作。
ProblemZone目录
ProblemZone目录包含了系统的核心数据模型,这些模型代表了业务领域中的实体。
- Project:项目类,继承自
CDataMngStruct,代表一个工程项目,包含项目名称、描述、位置等属性。 - Device:设备类,代表一个物理设备,包含设备序列号、型号、软硬件版本、MAC地址等属性,并提供与设备通信的方法。
- Script:脚本类,代表一个测量脚本,包含电极数量、测量类型等属性,并提供显示脚本内容和详情的方法。
- TestingZone:测区类,代表项目下的一个具体测量区域。
Section sources
Views目录
Views目录包含了所有用户界面(UI)的实现,包括主框架窗口、各种管理窗口和对话框。
- MainFrm:主框架窗口,是应用程序的主界面,负责管理MDI子窗口的创建和布局。
- devmngframe:设备管理框架,用于显示和管理设备。
- datamngframe:数据管理框架,用于显示和管理项目、测区和测试数据。
- sptmngframe:脚本管理框架,用于显示和管理脚本。
- 各种对话框:如
DailLogin(登录对话框)、OpCreateProjectDlg(创建项目对话框)等,用于用户交互。
Section sources
应用程序对象与管理器协调
CGeoMativeApp应用程序对象是整个系统的协调中心。它在InitInstance方法中创建并初始化所有核心管理器对象,并将它们作为成员变量存储。这些管理器通过m_pConnection共享同一个数据库连接,确保了数据的一致性。
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
常量与枚举的广泛应用
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
模块间调用关系示例
用户操作通过UI层触发Manager层的业务逻辑处理,这是一个典型的模块间调用流程。以用户在主界面点击“设备管理”菜单为例:
- UI层 (Views):
MainFrm.cpp中的OnMngDevWin消息处理函数被调用。 - 协调层 (Main):
OnMngDevWin函数负责创建或激活CDevMngFrame设备管理窗口。 - 业务逻辑层 (Managers):
CDevMngFrame在初始化时,会调用CGeoMativeApp的全局实例theApp中的m_pDevManager管理器的ShowTzList或GetDevice等方法来获取设备数据。 - 数据模型层 (ProblemZone):
CDevManager通过其m_devLinkList链表或直接查询数据库,获取CDevice对象的数据。 - 返回UI层:获取的数据被返回给
CDevMngFrame,并在其UI控件(如CListCtrl)中显示。
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
系统架构图
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