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,306 @@
# Project数据模型
<cite>
**本文档中引用的文件**
- [Project.h](file://h/Project.h)
- [Project.cpp](file://cpp/ProblemZone/Project.cpp)
- [ProManager.h](file://h/ProManager.h)
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp)
- [TestingZone.h](file://h/TestingZone.h)
- [TestingZone.cpp](file://cpp/ProblemZone/TestingZone.cpp)
- [DataMngStruct.h](file://h/DataMngStruct.h)
- [Script.h](file://h/Script.h)
- [TdRecord.h](file://h/TdRecord.h)
- [Device.h](file://h/Device.h)
</cite>
## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概述](#架构概述)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 引言
Project类是GeomativeStudio系统中的核心数据模型,作为项目容器管理着测区、任务配置、脚本集合和测量数据记录等关键信息。该类通过与ProManager模块协作,实现了项目生命周期的完整管理,包括创建、加载、保存和关闭操作。Project类从数据库加载元数据,并通过XML缓存文件实现项目持久化,确保数据在不同会话间的连续性。作为系统中项目管理的中心实体,Project类在多项目环境中通过单例模式提供统一访问接口,协调与Device、Script、TdRecord等其他模型的交互关系。
## 项目结构
GeomativeStudio项目采用分层架构设计,将核心数据模型、管理器、操作员和视图组件分离。Project类位于ProblemZone目录中,作为CDataMngStruct的派生类实现项目数据管理功能。系统通过ProManager类统一管理项目生命周期,而项目相关的持久化操作通过XML文件在CACHE目录中实现。项目结构清晰地划分了数据访问、业务逻辑和用户界面层,确保了系统的可维护性和扩展性。
```mermaid
graph TB
subgraph "数据层"
DB[(数据库)]
CACHE[(缓存文件)]
end
subgraph "业务逻辑层"
ProManager[ProManager]
Project[Project]
TestingZone[TestingZone]
end
subgraph "数据访问层"
DataMngStruct[CDataMngStruct]
end
subgraph "用户界面层"
Views[视图组件]
end
DB --> Project
CACHE --> Project
Project --> ProManager
ProManager --> Views
DataMngStruct --> Project
DataMngStruct --> TestingZone
```
**图源**
- [Project.h](file://h/Project.h#L1-L41)
- [ProManager.h](file://h/ProManager.h#L1-L77)
- [DataMngStruct.h](file://h/DataMngStruct.h#L1-L23)
**本节来源**
- [Project.h](file://h/Project.h#L1-L41)
- [ProManager.h](file://h/ProManager.h#L1-L77)
## 核心组件
Project类作为系统核心数据模型,负责管理项目元数据和聚合相关实体。该类从数据库加载项目信息,包括名称、创建时间、坐标系统等属性,并通过成员函数实现与ProManager的协作。Project实例通过句柄机制在内存中管理,确保多项目环境下的高效访问。类的设计体现了数据封装原则,将数据库访问细节与业务逻辑分离,提供了清晰的接口供上层组件调用。
**本节来源**
- [Project.h](file://h/Project.h#L1-L41)
- [Project.cpp](file://cpp/ProblemZone/Project.cpp#L1-L81)
## 架构概述
Project类在GeomativeStudio系统架构中扮演着中心角色,作为项目容器协调多个子系统的交互。系统采用管理器模式,通过ProManager统一管理Project实例的生命周期。Project类与TestingZone、Script、TdRecord等模型形成聚合关系,构建了完整的项目数据结构。持久化机制通过XML文件实现,确保项目数据在设备间的同步和本地缓存。整个架构设计支持多项目并发操作,通过句柄处理器和状态处理器确保线程安全和数据一致性。
```mermaid
classDiagram
class CDataMngStruct {
+ShowDetailInfo(CListCtrl& dmsDetailList) bool
+CDataMngStruct()
+~CDataMngStruct()
}
class CProject {
+ShowDetailInfo(CListCtrl& proDetailList) bool
+CProject(DWORD dwID, _ConnectionPtr& pConnection)
+~CProject()
+DWORD m_dwID
-_ConnectionPtr m_pConnection
-CString m_szCN
-CString m_szPRname
-CString m_szDesc
-CString m_szLocation
-CString m_szPRdate
-CString m_szDuration
-CString m_szPS
-CString m_szCS
-CString m_szPM
-CString m_szQAS
-CString m_szStandard
}
class CTestingZone {
+ShowDetailInfo(CListCtrl& tzDetailList) bool
+CTestingZone(DWORD dwID, _ConnectionPtr& pConnection)
+~CTestingZone()
+DWORD m_dwID
-_ConnectionPtr m_pConnection
-CString m_szTZname
-CString m_szCDate
-CString m_szDesc
-CString m_szLocation
-CString m_szCN
-CString m_szTZtype
}
class CScript {
+CScript(DWORD dwID, _ConnectionPtr& pConnection)
+~CScript()
+DWORD m_dwID
+CHandleProcessor m_handleProcessor
+int m_iEAmount
+int m_iSType
+int m_iAR
+AdjustRecListColumn(int iAR, CListCtrl& sptConListInfo) void
+ShowSptConInfo(CListCtrl& sptConList) bool
+ShowSptDetailInfo(CListCtrl& sptDetailList) bool
+ShowChannelList(CListCtrl& sptChannelList) bool
-_ConnectionPtr m_pConnection
}
class CDevice {
+m_szDevSN CString
+m_dwID DWORD
+SendFile(CString szHostFilePath, CString szFilePath, CString szFileName) BOOL
}
class CTdRecord {
+m_dwTzID DWORD
+m_dwSCID DWORD
+m_pDevice CDevice*
}
CDataMngStruct <|-- CProject
CDataMngStruct <|-- CTestingZone
CProject "1" *-- "0..*" CTestingZone : 包含
CProject "1" *-- "0..*" CScript : 包含
CProject "1" *-- "0..*" CTdRecord : 包含
CTestingZone "1" *-- "0..*" CTdRecord : 包含
CTdRecord --> CDevice : 关联
```
**图源**
- [Project.h](file://h/Project.h#L1-L41)
- [TestingZone.h](file://h/TestingZone.h#L1-L33)
- [Script.h](file://h/Script.h#L1-L39)
- [Device.h](file://h/Device.h#L1-L50)
- [TdRecord.h](file://h/TdRecord.h#L1-L45)
## 详细组件分析
### Project类分析
Project类作为系统核心数据模型,实现了项目元数据的存储和管理功能。该类从数据库加载项目信息,包括项目编号(CN)、项目名称(PRname)、描述(PRdesc)、位置(location)、创建日期(PRdate)、持续时间(duration)、投影系统(PS)、坐标系统(CS)、项目经理(PM)、质量保证(QAS)和标准(standard)等属性。通过继承CDataMngStruct基类,Project类获得了统一的数据管理接口。
#### 类图
```mermaid
classDiagram
class CProject {
+ShowDetailInfo(CListCtrl& proDetailList) bool
+CProject(DWORD dwID, _ConnectionPtr& pConnection)
+~CProject()
+DWORD m_dwID
-_ConnectionPtr m_pConnection
-CString m_szCN
-CString m_szPRname
-CString m_szDesc
-CString m_szLocation
-CString m_szPRdate
-CString m_szDuration
-CString m_szPS
-CString m_szCS
-CString m_szPM
-CString m_szQAS
-CString m_szStandard
}
class CDataMngStruct {
+ShowDetailInfo(CListCtrl& dmsDetailList) bool
+CDataMngStruct()
+~CDataMngStruct()
}
CDataMngStruct <|-- CProject
```
**图源**
- [Project.h](file://h/Project.h#L1-L41)
- [DataMngStruct.h](file://h/DataMngStruct.h#L1-L23)
#### 项目生命周期管理
Project类的生命周期由ProManager模块管理,通过一系列协作方法实现完整的项目操作流程:
```mermaid
sequenceDiagram
participant UI as 用户界面
participant ProManager as ProManager
participant Project as Project
participant DB as 数据库
participant Cache as 缓存文件
UI->>ProManager : 创建项目请求
ProManager->>ProManager : 显示创建对话框
ProManager->>DB : 检查项目名称是否存在
DB-->>ProManager : 返回检查结果
alt 项目名称已存在
ProManager-->>UI : 显示错误消息
else 项目名称可用
ProManager->>DB : 插入项目记录
DB-->>ProManager : 返回项目ID
ProManager->>Project : 创建Project实例
Project->>DB : 加载项目数据
DB-->>Project : 返回项目信息
ProManager->>Cache : 生成project.xml
Cache-->>ProManager : 确认文件创建
ProManager->>UI : 返回成功状态
end
UI->>ProManager : 加载项目
ProManager->>DB : 查询项目列表
DB-->>ProManager : 返回项目数据
ProManager->>Project : 获取Project实例
Project-->>UI : 显示项目详情
```
**图源**
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L249-L317)
- [Project.cpp](file://cpp/ProblemZone/Project.cpp#L19-L50)
**本节来源**
- [Project.h](file://h/Project.h#L1-L41)
- [Project.cpp](file://cpp/ProblemZone/Project.cpp#L1-L81)
- [ProManager.h](file://h/ProManager.h#L1-L77)
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L1-L2054)
### ProManager协作关系
ProManager作为项目管理器,与Project类形成紧密的协作关系。通过GetDMS方法,ProManager根据句柄获取相应的数据管理结构实例,实现了Project对象的单例访问模式。这种设计确保了在多项目环境中,每个项目实例在内存中只存在一个副本,提高了系统性能和数据一致性。
#### 单例访问模式
```mermaid
flowchart TD
Start([获取DMS实例]) --> CheckCache["检查缓存中是否存在"]
CheckCache --> |存在| ReturnInstance["返回缓存实例"]
CheckCache --> |不存在| CreateInstance["创建新实例"]
CreateInstance --> LoadFromDB["从数据库加载数据"]
LoadFromDB --> AddToCache["添加到缓存链表"]
AddToCache --> ReturnInstance
ReturnInstance --> End([返回DMS实例])
```
**图源**
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L155-L182)
**本节来源**
- [ProManager.h](file://h/ProManager.h#L1-L77)
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L155-L182)
## 依赖关系分析
Project类与系统中多个组件存在依赖关系,形成了复杂的交互网络。通过分析这些依赖关系,可以更好地理解系统的整体架构和数据流。
```mermaid
graph TD
ProManager --> Project : 创建/管理
Project --> TestingZone : 聚合
Project --> Script : 聚合
Project --> TdRecord : 聚合
Project --> DB : 数据持久化
Project --> Cache : XML缓存
TestingZone --> TdRecord : 聚合
TdRecord --> Device : 关联
Script --> TdRecord : 配置
ProManager --> DB : 数据访问
ProManager --> Device : 设备同步
style Project fill:#f9f,stroke:#333
style ProManager fill:#bbf,stroke:#333
```
**图源**
- [ProManager.h](file://h/ProManager.h#L1-L77)
- [Project.h](file://h/Project.h#L1-L41)
- [TestingZone.h](file://h/TestingZone.h#L1-L33)
**本节来源**
- [ProManager.h](file://h/ProManager.h#L1-L77)
- [Project.h](file://h/Project.h#L1-L41)
- [TestingZone.h](file://h/TestingZone.h#L1-L33)
## 性能考虑
Project类的设计考虑了性能优化,通过缓存机制减少数据库访问频率。ProManager维护的m_dmsLinkList链表缓存了已创建的Project实例,避免了重复创建和数据加载。在多项目环境下,这种缓存策略显著提高了系统响应速度。同时,XML缓存文件的使用减少了设备同步时的数据传输量,优化了I/O性能。线程安全通过句柄处理器和状态处理器实现,确保在并发访问时的数据一致性。
## 故障排除指南
在使用Project类时可能遇到的常见问题及解决方案:
1. **项目创建失败**:检查项目名称是否已存在,确保数据库连接正常
2. **数据加载异常**:验证数据库表结构是否匹配,检查XML缓存文件完整性
3. **设备同步问题**:确认设备连接状态,检查文件传输权限
4. **内存泄漏**:确保通过ProManager正确管理Project实例生命周期
5. **线程安全问题**:使用ProManager提供的同步机制,避免直接操作Project实例
**本节来源**
- [ProManager.cpp](file://cpp/Managers/ProManager.cpp#L249-L483)
- [Project.cpp](file://cpp/ProblemZone/Project.cpp#L19-L50)
## 结论
Project类作为GeomativeStudio系统的核心数据模型,成功实现了项目容器的功能,有效管理了项目元数据和相关实体。通过与ProManager模块的协作,该类提供了完整的项目生命周期管理功能,包括创建、加载、保存和关闭操作。基于XML的持久化机制确保了数据的可靠存储和设备同步。类的设计体现了良好的面向对象原则,通过继承、聚合和单例模式构建了清晰的架构。未来可进一步优化缓存策略和线程安全机制,以支持更大规模的项目管理和更高的并发性能。