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

7.2 KiB
Raw Permalink Blame History

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

本文档详细阐述了设备管理系统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服务导航、对话框、依赖注入容器配置、程序入口。

项目依赖关系图

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 快速创建项目并添加包:

# 创建解决方案和项目
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