Files
petwash/PetWashControl/PROJECT_STRUCTURE.md
GukSang.Jin 9c66b6cd82
2026-03-03 16:55:02 +08:00

194 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PetWashControl 项目结构说明
## 文件夹组织
```
PetWashControl/
├── Converters/ # 值转换器
│ └── BoolToStatusConverter.cs
├── Models/ # 数据模型
│ ├── Order.cs
│ └── Package.cs
├── Services/ # 业务服务层
│ ├── ApiService.cs # API通信服务
│ ├── MqttClientService.cs # MQTT客户端服务
│ ├── ConfigurationService.cs # 配置管理
│ └── LogService.cs # 日志服务
├── ViewModels/ # 视图模型MVVM
│ └── MainViewModel.cs
├── Views/ # 视图XAML界面
│ ├── MainWindow.xaml
│ └── MainWindow.xaml.cs
├── Resources/ # 资源文件
│ └── Styles.xaml # 样式定义
├── App.xaml # 应用程序入口
├── App.xaml.cs
└── AssemblyInfo.cs
```
## 架构模式
### MVVM (Model-View-ViewModel)
- **Model**: 数据模型定义业务实体Package, Order
- **View**: XAML界面负责UI展示
- **ViewModel**: 视图模型,处理业务逻辑和数据绑定
### 依赖注入
使用构造函数注入服务依赖:
- ConfigurationService: 配置管理
- ApiService: HTTP API通信
- MqttClientService: MQTT消息通信
- LogService: 日志记录
## 核心组件
### 1. Services服务层
#### ApiService
- 负责与后端API通信
- 提供套餐查询、订单管理等接口
- 统一异常处理
#### MqttClientService
- MQTT客户端封装
- 订阅设备状态和命令主题
- 自动重连机制
#### ConfigurationService
- 集中管理配置参数
- API地址、MQTT连接信息等
#### LogService
- 日志记录到文件和调试窗口
- 按日期分割日志文件
### 2. ViewModels视图模型
#### MainViewModel
- 使用 CommunityToolkit.Mvvm 实现MVVM
- ObservableProperty: 自动属性通知
- RelayCommand: 命令绑定
- 业务流程控制
### 3. Converters值转换器
#### BoolToStatusConverter
- 将布尔值转换为状态文本
- 用于UI显示
### 4. Resources资源
#### Styles.xaml
- 统一的UI样式定义
- 颜色主题
- 按钮、文本等控件样式
## NuGet 依赖包
```xml
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
<PackageReference Include="MQTTnet" Version="4.3.7.1207" />
<PackageReference Include="System.Net.Http.Json" Version="8.0.1" />
<PackageReference Include="System.Text.Json" Version="8.0.5" />
```
### 包说明
- **CommunityToolkit.Mvvm**: MVVM框架提供ObservableObject、RelayCommand等
- **MQTTnet**: MQTT客户端库4.3.7版本)
- **Microsoft.Extensions.Hosting**: 依赖注入和托管服务
- **System.Net.Http.Json**: HTTP JSON扩展方法
- **System.Text.Json**: JSON序列化
### 版本兼容性说明
#### MQTTnet 4.3.7 重要变更
1. **ConnectAsync**: 需要传入 `CancellationToken` 参数
```csharp
await _mqttClient.ConnectAsync(_options, CancellationToken.None);
```
2. **SubscribeAsync**: 使用 Builder 模式
```csharp
var subscribeOptions = new MqttClientSubscribeOptionsBuilder()
.WithTopicFilter("device/status")
.WithTopicFilter("device/command")
.Build();
await _mqttClient.SubscribeAsync(subscribeOptions, CancellationToken.None);
```
3. **PublishAsync**: 需要传入 `CancellationToken` 参数
```csharp
await _mqttClient.PublishAsync(message, CancellationToken.None);
```
4. **Payload 属性**: `PayloadSegment` 返回 `ArraySegment<byte>`
```csharp
var payloadBytes = args.ApplicationMessage.PayloadSegment.ToArray();
var payload = Encoding.UTF8.GetString(payloadBytes);
```
## 数据流
1. **初始化**: MainViewModel.InitializeAsync()
- 连接MQTT Broker
- 加载套餐列表
2. **创建订单**: CreateOrderCommand
- 调用API创建订单
- 更新UI状态
3. **支付**: SimulatePaymentCommand
- 确认支付
- 接收MQTT开门指令
4. **关门**: CloseDoorCommand
- 发送MQTT关门状态
- 更新订单状态
- 接收开始清洗指令
5. **完成**: 自动流程
- 模拟清洗时间
- 发送完成状态
- 更新订单
## 配置说明
### ConfigurationService 默认配置
```csharp
ApiBaseUrl = "https://localhost:7001/"
MqttBrokerHost = "localhost"
MqttBrokerPort = 1883
MqttClientId = "PetWashControl"
WashSimulationSeconds = 10
```
## 日志
日志文件位置: `{应用目录}/Logs/log_yyyyMMdd.txt`
日志级别:
- INFO: 一般信息
- WARN: 警告
- ERROR: 错误(包含异常堆栈)
## 开发建议
1. 新增功能时遵循MVVM模式
2. 服务层保持单一职责
3. 使用依赖注入管理服务
4. 异常处理要友好提示用户
5. 重要操作记录日志
6. UI样式统一使用资源字典
## 扩展点
- 添加新视图: Views文件夹
- 添加新服务: Services文件夹
- 自定义样式: Resources/Styles.xaml
- 配置参数: ConfigurationService