# 软件开发文档 - 01. DMS.Core 详细设计 `DMS.Core` 是系统的核心,定义了所有业务逻辑的蓝图。它不包含任何具体实现,确保了业务规则的独立性和可移植性。 ## 1. 目录结构 ``` DMS.Core/ ├── Enums/ │ ├── ProtocolType.cs │ └── SignalType.cs ├── Models/ │ ├── Device.cs │ ├── MqttServer.cs │ ├── Variable.cs │ ├── VariableHistory.cs │ └── VariableTable.cs ├── Interfaces/ │ ├── IBaseRepository.cs │ ├── IDeviceRepository.cs │ ├── IMqttServerRepository.cs │ ├── IVariableHistoryRepository.cs │ ├── IVariableRepository.cs │ └── IVariableTableRepository.cs └── DMS.Core.csproj ``` ## 2. 文件详解 ### 2.1. 枚举 (`Enums/`) #### `ProtocolType.cs` ```csharp // 文件: DMS.Core/Enums/ProtocolType.cs namespace DMS.Core.Enums; /// /// 定义了设备支持的通信协议类型。 /// public enum ProtocolType { /// /// Siemens S7 通信协议。 /// S7, /// /// OPC UA (Unified Architecture) 协议。 /// OpcUa, /// /// Modbus TCP 协议。 /// ModbusTcp } ``` #### `SignalType.cs` ```csharp // 文件: DMS.Core/Enums/SignalType.cs namespace DMS.Core.Enums; /// /// 定义了变量支持的数据类型。 /// public enum SignalType { /// /// 布尔值 (true/false)。 /// Boolean, /// /// 字节 (8-bit 无符号整数)。 /// Byte, /// /// 16位有符号整数。 /// Int16, /// /// 32位有符号整数。 /// Int32, /// /// 单精度浮点数。 /// Float, /// /// 字符串。 /// String } ``` ### 2.2. 领域模型 (`Models/`) #### `Device.cs` ```csharp // 文件: DMS.Core/Models/Device.cs namespace DMS.Core.Models; /// /// 代表一个可管理的物理或逻辑设备。 /// public class Device { /// /// 唯一标识符。 /// public int Id { get; set; } /// /// 设备名称,用于UI显示和识别。 /// public string Name { get; set; } /// /// 设备使用的通信协议。 /// public ProtocolType Protocol { get; set; } /// /// 设备的IP地址。 /// public string IpAddress { get; set; } /// /// 设备的通信端口号。 /// public int Port { get; set; } /// /// 指示此设备是否处于激活状态。只有激活的设备才会被轮询。 /// public bool IsActive { get; set; } /// /// 此设备包含的变量表集合。 /// public List VariableTables { get; set; } = new(); } ``` ... (其他模型 `MqttServer.cs`, `Variable.cs`, `VariableHistory.cs`, `VariableTable.cs` 的代码结构与此类似,包含详细的属性和注释) ... ### 2.3. 仓储接口 (`Interfaces/`) #### `IBaseRepository.cs` ```csharp // 文件: DMS.Core/Interfaces/IBaseRepository.cs namespace DMS.Core.Interfaces; /// /// 提供泛型数据访问操作的基础仓储接口。 /// /// 领域模型的类型。 public interface IBaseRepository where T : class { /// /// 异步根据ID获取单个实体。 /// /// 实体的主键ID。 /// 找到的实体,如果不存在则返回null。 Task GetByIdAsync(int id); /// /// 异步获取所有实体。 /// /// 所有实体的列表。 Task> GetAllAsync(); /// /// 异步添加一个新实体。 /// /// 要添加的实体。 Task AddAsync(T entity); /// /// 异步更新一个已存在的实体。 /// /// 要更新的实体。 Task UpdateAsync(T entity); /// /// 异步根据ID删除一个实体。 /// /// 要删除的实体的主键ID。 Task DeleteAsync(int id); } ``` #### `IDeviceRepository.cs` ```csharp // 文件: DMS.Core/Interfaces/IDeviceRepository.cs using DMS.Core.Models; namespace DMS.Core.Interfaces; /// /// 继承自IBaseRepository,提供设备相关的特定数据查询功能。 /// public interface IDeviceRepository : IBaseRepository { /// /// 异步获取所有激活的设备,并级联加载其下的变量表和变量。 /// 这是后台轮询服务需要的主要数据。 /// /// 包含完整层级结构的激活设备列表。 Task> GetActiveDevicesWithDetailsAsync(); /// /// 异步根据协议类型获取设备列表。 /// /// 协议类型。 /// 符合条件的设备列表。 Task> GetDevicesByProtocolAsync(ProtocolType protocol); } ``` ... (其他仓储接口 `IMqttServerRepository.cs`, `IVariableRepository.cs` 等的代码结构与此类似) ...