194 lines
4.9 KiB
Markdown
194 lines
4.9 KiB
Markdown
# 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
|