Files
geomative/GeomativeStudio/.qoder/repowiki/zh/content/开发者指南/代码结构/代码结构.md
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

10 KiB
Raw Blame History

代码结构

**本文档引用的文件** - [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)

目录

  1. 项目结构概述
  2. 核心模块职责划分
  3. 应用程序对象与管理器协调
  4. 常量与枚举的广泛应用
  5. 模块间调用关系示例
  6. 系统架构图

项目结构概述

GeomativeStudio项目的代码结构清晰地划分为多个目录,每个目录承担特定的职责。cpph目录下分别存放C++源文件和头文件,其子目录体现了系统的分层架构。Main目录包含应用程序入口和全局对象;Managers目录包含设备、项目、脚本、测试数据和I/O管理器等核心业务逻辑组件;Operator目录包含具体操作实现;ProblemZone目录包含项目、设备、脚本点等核心数据模型;Views目录包含所有UI视图和对话框实现。

Section sources

核心模块职责划分

Main目录

Main目录是应用程序的入口点,主要包含GeoMative.cppGlobal.cpp两个核心文件。GeoMative.cpp定义了CGeoMativeApp类,该类继承自CWinApp,负责应用程序的初始化、运行和退出。它在InitInstance方法中创建并初始化所有核心管理器对象,并建立与数据库的连接。Global.cpp则定义了全局变量和函数,如theApp全局应用程序对象实例、aDevLinkTable设备链接表以及各种工具函数。

Managers目录

Managers目录包含了系统的核心业务逻辑组件,即各种管理器(Manager)。这些管理器负责处理特定领域的业务逻辑和数据持久化。

  • DevManager:设备管理器,负责管理所有设备的生命周期,包括设备的注册、连接、状态更新和信息获取。它通过m_devLinkList链表维护所有设备对象,并提供GetDeviceGetDeviceByID等方法来检索设备。
  • ProManager:项目管理器,负责管理项目(Project)和测区(TestingZone)的层次结构。它通过m_dmsLinkList链表管理数据管理结构(DMS),并提供ShowProListShowTzList等方法来展示项目和测区列表。
  • SptManager:脚本管理器,负责管理脚本(Script)的创建、加载和同步。
  • TdManager:测试数据管理器,负责管理测试数据(Testing Data)的存储和检索。
  • ExecManager:执行管理器,负责管理执行任务和流程。
  • IOManagerI/O管理器,负责处理输入输出操作。

Section sources

Operator目录

Operator目录包含了具体操作的实现类。这些类通常封装了复杂的业务逻辑或与外部系统的交互。例如,DataOperator.cpp实现了数据操作相关的功能,如文件导入导出、数据同步等。DevOperator.cppSptOperator.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_ZHCNLANG_ENUS用于标识当前用户界面语言。
  • 状态常量PZ_STATE_OFFLINEPZ_STATE_ONLINE等用于表示设备、项目等实体的状态。
  • 样式常量PZ_STYLE_PROPZ_STYLE_TZPZ_STYLE_DEV等用于区分不同类型的实体。
  • 枚举EN_TRANSFER_FILE_METHOD枚举定义了文件传输方式(COM、USB、云端、WiFi),EN_CHANNEL_INFO枚举定义了通道信息(单通道、多通道)。

这些常量和枚举在系统各处被引用,例如在CGeoMativeAppInitInstance方法中,根据g_iTransFileMode(其值来自EN_TRANSFER_FILE_METHOD)决定初始化不同的网络连接逻辑。

Section sources

模块间调用关系示例

用户操作通过UI层触发Manager层的业务逻辑处理,这是一个典型的模块间调用流程。以用户在主界面点击“设备管理”菜单为例:

  1. UI层 (Views)MainFrm.cpp中的OnMngDevWin消息处理函数被调用。
  2. 协调层 (Main)OnMngDevWin函数负责创建或激活CDevMngFrame设备管理窗口。
  3. 业务逻辑层 (Managers)CDevMngFrame在初始化时,会调用CGeoMativeApp的全局实例theApp中的m_pDevManager管理器的ShowTzListGetDevice等方法来获取设备数据。
  4. 数据模型层 (ProblemZone)CDevManager通过其m_devLinkList链表或直接查询数据库,获取CDevice对象的数据。
  5. 返回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