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

191 lines
4.8 KiB
Markdown
Raw Normal View History

2025-07-20 23:09:47 +08:00
# 软件开发文档 - 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<VariableTable> 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<Variable> 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<MqttServer> 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<Variable> 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<T>` - 基础仓储接口
```csharp
// 文件: 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` 并可以添加特定于该模型的查询方法。
```csharp
// 文件: 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 等,结构类似。
```