You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
3.3 KiB

# LTEClient 重构说明
## 重构原因
### 1. 职责分离问题
**原始问题:**
- `LTEClient` 承担了过多职责,包括日志解析、存储、字符串ID管理、正则表达式处理等
-`LogsManager` 存在功能重复,违反了单一职责原则
**重构后:**
- `LTEClient` 专注于客户端状态管理和日志解析
- `LogsManager` 负责全局日志管理和字符串ID管理
### 2. 重复功能消除
**原始重复功能:**
```csharp
// LTEClient 中的重复实现
private readonly Dictionary<string, int> _stringToIdCache = new();
private readonly Dictionary<int, string> _idToStringCache = new();
private int _stringIdCounter = 0;
public int StringToId(string str) { ... }
public string IdToString(int id) { ... }
```
**重构后:**
```csharp
// 委托给 LogsManager
public int StringToId(string str) => _logsManager.String2Id(str);
public string IdToString(int id) => _logsManager.Id2String(id);
```
### 3. 依赖注入改进
**原始问题:**
- `LTEClient` 独立管理字符串ID缓存
- 多个客户端实例可能产生不一致的ID映射
**重构后:**
- 通过依赖注入使用统一的 `LogsManager`
- 确保字符串ID在整个应用中的一致性
## 重构内容
### 1. 构造函数修改
```csharp
// 原始构造函数
public LTEClient(ClientConfig config)
public LTEClient(string name)
// 重构后构造函数
public LTEClient(ClientConfig config, LogsManager logsManager)
public LTEClient(string name, LogsManager logsManager)
```
### 2. 移除重复字段
- 移除了 `_stringToIdCache`、`_idToStringCache`、`_stringIdCounter` 等重复字段
- 添加了 `_logsManager` 依赖字段
### 3. 方法委托
- `StringToId()``IdToString()` 方法现在委托给 `LogsManager`
- 保持了原有的公共接口不变
## 使用建议
### 1. 创建客户端实例
```csharp
// 在服务中创建客户端
var logsManager = new LogsManager();
var clientConfig = new ClientConfig { Name = "TestClient" };
var client = new LTEClient(clientConfig, logsManager);
```
### 2. 依赖注入配置
```csharp
// 在 Startup.cs 或 Program.cs 中配置
services.AddSingleton<LogsManager>();
services.AddTransient<LTEClient>(provider =>
{
var logsManager = provider.GetService<LogsManager>();
var config = new ClientConfig { Name = "DefaultClient" };
return new LTEClient(config, logsManager);
});
```
### 3. 进一步优化建议
1. **日志解析分离**:考虑将日志解析逻辑提取到专门的 `LogParser` 类中
2. **状态管理**:考虑使用状态模式管理客户端的不同状态
3. **事件驱动**:使用事件机制通知日志状态变化
4. **配置管理**:将正则表达式等配置提取到配置文件中
## 优势
1. **代码复用**:消除了字符串ID管理的重复代码
2. **一致性**:确保字符串ID在整个应用中的一致性
3. **可测试性**:通过依赖注入更容易进行单元测试
4. **可维护性**:职责分离使代码更容易维护和扩展
5. **性能优化**:统一的字符串ID缓存减少了内存使用
## 注意事项
1. **向后兼容**:保持了原有的公共接口,不会影响现有代码
2. **全局状态**:`LogsManager` 的字符串ID缓存是全局的,在应用重启前不会重置
3. **线程安全**:需要注意多线程环境下的字符串ID管理