# 软件开发文档 - 设备管理系统 (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
```
