Files
DMS/软件设计文档/01-核心领域模型与接口.md

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 等,结构类似。