Files
DMS/软件设计文档/01.第一版设计文档/00-总体架构与依赖.md

119 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 软件开发文档 - 总体架构与依赖
本文档详细阐述了设备管理系统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
```