4.8 KiB
4.8 KiB
软件开发文档 - 01. 核心领域模型与接口
本文档详细定义 DMS.Core 项目中的领域模型、仓储接口和核心枚举。
1. 核心枚举 (Enums/)
// 文件: 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 - 设备
代表一个物理或逻辑设备。
// 文件: 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<VariableTable> VariableTables { get; set; } = new();
}
2.2. VariableTable - 变量表
组织和管理一组相关的变量。
// 文件: 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<Variable> Variables { get; set; } = new();
}
2.3. Variable - 变量
核心数据点,代表从设备读取的单个值。
// 文件: 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<MqttServer> MqttServers { get; set; } = new(); // 关联的MQTT服务器
}
2.4. MqttServer - MQTT服务器
代表一个MQTT Broker的配置。
// 文件: 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<Variable> Variables { get; set; } = new(); // 关联的变量
}
2.5. VariableHistory - 变量历史记录
用于存储变量值的变化记录。
// 文件: 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<T> - 基础仓储接口
// 文件: DMS.Core/Interfaces/IBaseRepository.cs
namespace DMS.Core.Interfaces;
public interface IBaseRepository<T> where T : class
{
Task<T> GetByIdAsync(int id);
Task<List<T>> GetAllAsync();
Task AddAsync(T entity);
Task UpdateAsync(T entity);
Task DeleteAsync(int id);
}
3.2. 专用仓储接口
这些接口继承自 IBaseRepository 并可以添加特定于该模型的查询方法。
// 文件: DMS.Core/Interfaces/IDeviceRepository.cs
namespace DMS.Core.Interfaces;
public interface IDeviceRepository : IBaseRepository<Device>
{
// 获取所有激活的设备,并包含其变量表和变量
Task<List<Device>> GetActiveDevicesWithDetailsAsync();
// 根据协议类型获取设备
Task<List<Device>> GetDevicesByProtocolAsync(ProtocolType protocol);
}
// 文件: DMS.Core/Interfaces/IVariableRepository.cs
namespace DMS.Core.Interfaces;
public interface IVariableRepository : IBaseRepository<Variable>
{
// 获取一个变量及其关联的MQTT服务器
Task<Variable> GetVariableWithMqttServersAsync(int variableId);
}
// 文件: DMS.Core/Interfaces/IMqttServerRepository.cs
namespace DMS.Core.Interfaces;
public interface IMqttServerRepository : IBaseRepository<MqttServer>
{
// 获取一个MQTT服务器及其关联的所有变量
Task<MqttServer> GetMqttServerWithVariablesAsync(int serverId);
}
// 其他仓储接口,如 IVariableTableRepository, IVariableHistoryRepository 等,结构类似。