191 lines
4.8 KiB
Markdown
191 lines
4.8 KiB
Markdown
|
|
# 软件开发文档 - 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 等,结构类似。
|
||
|
|
```
|