# 软件开发文档 - 总体架构与依赖

本文档详细阐述了设备管理系统（DMS）的总体设计、分层架构、各层职责以及每个项目所需的NuGet包依赖。

## 1. 项目概述

DMS系统是一个用于管理、监控和数据采集的综合平台，核心功能包括：

*   **多协议设备支持**：能够管理和监控多种通信协议（如 Siemens S7、OPC UA、Modbus）的设备。
*   **层级化设备模型**：支持“设备 -> 变量表 -> 变量”的层级结构化管理。
*   **灵活的数据转发**：变量数据在采集后，可配置转发至一个或多个MQTT服务器。
*   **实时数据处理**：通过链式处理器对采集到的原始数据进行清洗、计算和转换。
*   **历史数据存储**：将处理后的数据存入数据库，用于历史追溯和分析。
*   **现代化的用户界面**：基于WPF框架，提供直观、响应迅速的操作界面。

## 2. 设计原则

*   **分层架构 (Layered Architecture)**：采用经典的洋葱架构思想，将项目分为`核心(Core)`、`应用(Application)`、`基础设施(Infrastructure)`和`表现(Presentation)`四层，实现高内聚、低耦合。
*   **依赖倒置原则 (DIP)**：高层模块不依赖于低层模块的具体实现，而是依赖于抽象（接口）。接口定义在核心层，具体实现在基础设施层。
*   **单一职责原则 (SRP)**：每个类和模块都只负责一项功能。
*   **可扩展性**：系统设计应易于扩展，例如，未来可以方便地增加新的通信协议或数据处理器。

## 3. 项目结构与职责

系统将由以下四个主要项目组成，以实现关注点分离。

| 项目名               | 核心职责                                                                                             | 关键内容                                                                                               |
| ---------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| `DMS.Core`             | **领域核心**：定义业务规则和数据结构，不依赖任何具体技术实现。是整个系统的稳定内核。               | 领域模型 (`Device`, `Variable`)、业务枚举、仓储接口 (`IDeviceRepository`)、自定义业务异常。            |
| `DMS.Application`      | **应用服务**：编排领域模型完成业务用例（Use Case），处理事务、DTO转换。是UI层与核心层的桥梁。        | 应用服务 (`DeviceAppService`)、数据传输对象 (DTOs)、应用层接口、AutoMapper配置。                       |
| `DMS.Infrastructure`   | **基础设施**：提供所有外部技术的具体实现，如数据库访问、协议通信、日志记录等。负责实现核心层的接口。 | 数据库实体、SqlSugar仓储实现、S7/MQTT通信服务、NLog日志服务、数据处理链的具体处理器。                |
| `DMS.WPF`              | **表现层**：提供用户界面（UI），采用MVVM模式。负责用户交互、数据显示和请求派发。                     | 视图 (Views)、视图模型 (ViewModels)、UI服务（导航、对话框）、依赖注入容器配置、程序入口。            |

### 项目依赖关系图

```mermaid
graph TD
    subgraph 表现层
        DMS.WPF
    end
    subgraph 应用层
        DMS.Application
    end
    subgraph 核心层
        DMS.Core
    end
    subgraph 基础设施层
        DMS.Infrastructure
    end

    DMS.WPF --> DMS.Application
    DMS.WPF --> DMS.Infrastructure
    DMS.Application --> DMS.Core
    DMS.Infrastructure --> DMS.Core
```

## 4. NuGet包依赖清单

以下是每个项目必须安装的NuGet包，请严格按照此清单进行安装。

### 4.1. `DMS.Core`

此项目应保持纯净，**不安装任何第三方NuGet包**，以确保其独立性。

### 4.2. `DMS.Application`

| 包名                                | 用途                                                                 |
| ----------------------------------- | -------------------------------------------------------------------- |
| `AutoMapper`                        | 用于在领域模型和DTO之间进行自动对象映射。                              |
| `AutoMapper.Extensions.Microsoft.DependencyInjection` | 将AutoMapper与依赖注入容器集成。                                     |

### 4.3. `DMS.Infrastructure`

| 包名                                | 用途                                                                 |
| ----------------------------------- | -------------------------------------------------------------------- |
| `SqlSugarCore`                      | 强大的ORM框架，用于数据库操作。                                      |
| `S7netplus`                         | 用于与Siemens S7系列PLC进行通信。                                    |
| `MQTTnet`                           | 高性能的.NET MQTT客户端库，用于数据发布。                              |
| `MQTTnet.Extensions.ManagedClient`  | 提供了更稳定的托管MQTT客户端，支持自动重连。                         |
| `NLog`                              | 灵活的日志记录框架。                                                 |
| `NLog.Extensions.Logging`           | 将NLog与Microsoft的通用日志抽象集成。                                |
| `Microsoft.Extensions.Caching.Memory` | 提供内存缓存功能，用于实现变量值变化检测。                           |

### 4.4. `DMS.WPF`

| 包名                                      | 用途                                                                 |
| ----------------------------------------- | -------------------------------------------------------------------- |
| `Microsoft.Extensions.DependencyInjection` | 官方依赖注入框架，用于管理整个应用的生命周期和依赖关系。             |
| `Microsoft.Extensions.Hosting`            | 用于 `IHostedService`，支持后台服务。                                |
| `CommunityToolkit.Mvvm`                   | 官方MVVM工具包，提供`ObservableObject`, `RelayCommand`等，极大简化MVVM开发。 |
| `iNKORE.UI.WPF.Modern`                    | 一套美观且功能强大的WPF UI控件库，用于构建现代化界面（如对话框、通知）。 |
| `NLog.Extensions.Logging`                 | 用于在WPF项目中配置和使用NLog。                                      |
| `Microsoft.Xaml.Behaviors.Wpf`            | 提供事件到命令的绑定等行为支持，是MVVM的有力补充。                   |

## 5. 开发环境初始化命令示例

您可以使用 `dotnet` CLI 快速创建项目并添加包：

```bash
# 创建解决方案和项目
dotnet new sln -n DMS
dotnet new classlib -n DMS.Core
dotnet new classlib -n DMS.Application
dotnet new classlib -n DMS.Infrastructure
dotnet new wpf -n DMS.WPF

# 将项目添加到解决方案
dotnet sln add ./**/*.csproj

# 为DMS.Application添加包
dotnet add DMS.Application package AutoMapper
# ...其他包

# 添加项目引用
dotnet add DMS.Application reference DMS.Core
dotnet add DMS.Infrastructure reference DMS.Application
dotnet add DMS.WPF reference DMS.Infrastructure
```
