# 软件开发文档 - 设备管理系统 (DMS) ## 1. 引言 ### 1.1. 项目概述 本文档旨在详细阐述设备管理系统(DMS)的设计与实现方案。该系统是一个用于管理、监控和数据采集的综合平台,核心功能包括: * **多协议设备支持**:能够管理和监控多种通信协议(如 Siemens S7、OPC UA、Modbus)的设备。 * **层级化设备模型**:支持“设备 -> 变量表 -> 变量”的层级结构化管理。 * **灵活的数据转发**:变量数据在采集后,可配置转发至一个或多个MQTT服务器。 * **实时数据处理**:通过链式处理器对采集到的原始数据进行清洗、计算和转换。 * **历史数据存储**:将处理后的数据存入数据库,用于历史追溯和分析。 * **现代化的用户界面**:基于WPF框架,提供直观、响应迅速的操作界面。 ### 1.2. 设计原则 * **分层架构 (Layered Architecture)**:采用经典的洋葱架构思想,将项目分为`核心(Core)`、`应用(Application)`、`基础设施(Infrastructure)`和`表现(Presentation)`四层,实现高内聚、低耦合。 * **依赖倒置原则 (DIP)**:高层模块不依赖于低层模块的具体实现,而是依赖于抽象(接口)。接口定义在核心层,具体实现在基础设施层。 * **单一职责原则 (SRP)**:每个类和模块都只负责一项功能。 * **可扩展性**:系统设计应易于扩展,例如,未来可以方便地增加新的通信协议或数据处理器。 ## 2. 项目结构设计 系统将由以下四个主要项目组成,以实现关注点分离。 ### 2.1. `DMS.Core` - 核心层 这是整个系统的核心,不依赖于任何外部框架或技术。 * **职责**: * 定义核心的业务领域模型(Domain Models),如 `Device`, `VariableTable`, `Variable`, `MqttServer`。 * 定义业务规则和逻辑。 * 定义仓储库(Repositories)和领域服务的接口,如 `IDeviceRepository`, `IVariableRepository`。 * **包含内容**: * `Models/`: 存放领域模型类。 * `Enums/`: 存放核心业务相关的枚举。 * `Interfaces/`: 存放仓储库和领域服务的接口定义。 * `Exceptions/`: 存放自定义的业务异常。 ### 2.2. `DMS.Application` - 应用层 负责编排和协调领域对象以完成具体的业务用例。 * **职责**: * 实现具体的应用服务(Use Cases),如“添加新设备”、“更新变量值”。 * 定义数据传输对象(DTOs),用于在表现层和应用层之间传递数据。 * 处理事务和授权等应用级关注点。 * **包含内容**: * `Services/`: 存放应用服务的实现。 * `DTOs/`: 存放数据传输对象。 * `Interfaces/`: 存放应用服务的接口。 ### 2.3. `DMS.Infrastructure` - 基础设施层 提供所有与外部世界交互的技术实现。 * **职责**: * 实现 `DMS.Core` 中定义的仓储接口,负责与数据库进行交互(使用 `SqlSugar` ORM)。 * 实现与其他外部系统的集成,如S7协议通信、MQTT客户端、日志记录(NLog)等。 * 管理数据库连接、迁移和配置。 * **包含内容**: * `Data/`: 包含 `DbContext` 和数据库初始化逻辑。 * `Repositories/`: 仓储接口的具体实现。 * `Services/`: 存放与基础设施相关的服务实现(如S7通信服务、MQTT发布服务)。 * `Entities/`: 数据库表对应的实体类。 ### 2.4. `DMS.WPF` - 表现层 用户界面(UI),负责与用户交互和数据显示。 * **职责**: * 提供用户操作界面。 * 显示来自应用层的数据。 * 将用户的操作请求发送给应用层。 * **包含内容**: * `Views/`: XAML窗口和用户控件。 * `ViewModels/`: 视图模型(MVVM模式)。 * `Services/`: UI相关的服务,如导航、对话框和通知服务。 * `App.xaml.cs`: 程序启动和依赖注入(DI)容器的配置。 ### 2.5. 项目依赖关系图 ```mermaid graph TD subgraph 表现层 DMS.WPF end subgraph 应用层 DMS.Application end subgraph 核心层 DMS.Core end subgraph 基础设施层 DMS.Infrastructure end DMS.WPF --> DMS.Application DMS.Application --> DMS.Core DMS.Infrastructure --> DMS.Application DMS.Infrastructure --> DMS.Core ```