# 软件开发文档 - 01. 核心领域模型与接口 本文档详细定义 `DMS.Core` 项目中的领域模型、仓储接口和核心枚举。 ## 1. 核心枚举 (`Enums/`) ```csharp // 文件: DMS.Core/Enums/ProtocolType.cs namespace DMS.Core.Enums; public enum ProtocolType { S7, OpcUa, ModbusTcp } // 文件: DMS.Core/Enums/SignalType.cs namespace DMS.Core.Enums; public enum SignalType { Boolean, Byte, Int16, Int32, Float, String } ``` ## 2. 领域模型 (`Models/`) 领域模型是业务核心的C#类表示。 ### 2.1. `Device` - 设备 代表一个物理或逻辑设备。 ```csharp // 文件: DMS.Core/Models/Device.cs namespace DMS.Core.Models; public class Device { public int Id { get; set; } public string Name { get; set; } public ProtocolType Protocol { get; set; } public string IpAddress { get; set; } // 设备IP地址 public int Port { get; set; } // 端口号 public bool IsActive { get; set; } // 是否启用 public List VariableTables { get; set; } = new(); } ``` ### 2.2. `VariableTable` - 变量表 组织和管理一组相关的变量。 ```csharp // 文件: DMS.Core/Models/VariableTable.cs namespace DMS.Core.Models; public class VariableTable { public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } public bool IsActive { get; set; } // 是否启用 public int DeviceId { get; set; } public Device Device { get; set; } public List Variables { get; set; } = new(); } ``` ### 2.3. `Variable` - 变量 核心数据点,代表从设备读取的单个值。 ```csharp // 文件: DMS.Core/Models/Variable.cs namespace DMS.Core.Models; public class Variable { public int Id { get; set; } public string Name { get; set; } // 变量名 public string Address { get; set; } // 在设备中的地址 (例如: DB1.DBD0, M100.0) public SignalType DataType { get; set; } // 数据类型 public bool IsActive { get; set; } // 是否启用 public int VariableTableId { get; set; } public VariableTable VariableTable { get; set; } public List MqttServers { get; set; } = new(); // 关联的MQTT服务器 } ``` ### 2.4. `MqttServer` - MQTT服务器 代表一个MQTT Broker的配置。 ```csharp // 文件: DMS.Core/Models/MqttServer.cs namespace DMS.Core.Models; public class MqttServer { public int Id { get; set; } public string ServerName { get; set; } public string BrokerAddress { get; set; } // Broker地址 public int Port { get; set; } // 端口 public string Username { get; set; } public string Password { get; set; } public bool IsActive { get; set; } // 是否启用 public List Variables { get; set; } = new(); // 关联的变量 } ``` ### 2.5. `VariableHistory` - 变量历史记录 用于存储变量值的变化记录。 ```csharp // 文件: DMS.Core/Models/VariableHistory.cs namespace DMS.Core.Models; public class VariableHistory { public long Id { get; set; } public int VariableId { get; set; } public string Value { get; set; } // 以字符串形式存储,便于通用性 public DateTime Timestamp { get; set; } } ``` ## 3. 仓储接口 (`Interfaces/`) 仓储接口定义了数据持久化的契约,由基础设施层实现。 ### 3.1. `IBaseRepository` - 基础仓储接口 ```csharp // 文件: DMS.Core/Interfaces/IBaseRepository.cs namespace DMS.Core.Interfaces; public interface IBaseRepository where T : class { Task GetByIdAsync(int id); Task> GetAllAsync(); Task AddAsync(T entity); Task UpdateAsync(T entity); Task DeleteAsync(int id); } ``` ### 3.2. 专用仓储接口 这些接口继承自 `IBaseRepository` 并可以添加特定于该模型的查询方法。 ```csharp // 文件: DMS.Core/Interfaces/IDeviceRepository.cs namespace DMS.Core.Interfaces; public interface IDeviceRepository : IBaseRepository { // 获取所有激活的设备,并包含其变量表和变量 Task> GetActiveDevicesWithDetailsAsync(); // 根据协议类型获取设备 Task> GetDevicesByProtocolAsync(ProtocolType protocol); } // 文件: DMS.Core/Interfaces/IVariableRepository.cs namespace DMS.Core.Interfaces; public interface IVariableRepository : IBaseRepository { // 获取一个变量及其关联的MQTT服务器 Task GetVariableWithMqttServersAsync(int variableId); } // 文件: DMS.Core/Interfaces/IMqttServerRepository.cs namespace DMS.Core.Interfaces; public interface IMqttServerRepository : IBaseRepository { // 获取一个MQTT服务器及其关联的所有变量 Task GetMqttServerWithVariablesAsync(int serverId); } // 其他仓储接口,如 IVariableTableRepository, IVariableHistoryRepository 等,结构类似。 ```