4.9 KiB
4.9 KiB
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 依赖包
<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 重要变更
-
ConnectAsync: 需要传入
CancellationToken参数await _mqttClient.ConnectAsync(_options, CancellationToken.None); -
SubscribeAsync: 使用 Builder 模式
var subscribeOptions = new MqttClientSubscribeOptionsBuilder() .WithTopicFilter("device/status") .WithTopicFilter("device/command") .Build(); await _mqttClient.SubscribeAsync(subscribeOptions, CancellationToken.None); -
PublishAsync: 需要传入
CancellationToken参数await _mqttClient.PublishAsync(message, CancellationToken.None); -
Payload 属性:
PayloadSegment返回ArraySegment<byte>var payloadBytes = args.ApplicationMessage.PayloadSegment.ToArray(); var payload = Encoding.UTF8.GetString(payloadBytes);
数据流
-
初始化: MainViewModel.InitializeAsync()
- 连接MQTT Broker
- 加载套餐列表
-
创建订单: CreateOrderCommand
- 调用API创建订单
- 更新UI状态
-
支付: SimulatePaymentCommand
- 确认支付
- 接收MQTT开门指令
-
关门: CloseDoorCommand
- 发送MQTT关门状态
- 更新订单状态
- 接收开始清洗指令
-
完成: 自动流程
- 模拟清洗时间
- 发送完成状态
- 更新订单
配置说明
ConfigurationService 默认配置
ApiBaseUrl = "https://localhost:7001/"
MqttBrokerHost = "localhost"
MqttBrokerPort = 1883
MqttClientId = "PetWashControl"
WashSimulationSeconds = 10
日志
日志文件位置: {应用目录}/Logs/log_yyyyMMdd.txt
日志级别:
- INFO: 一般信息
- WARN: 警告
- ERROR: 错误(包含异常堆栈)
开发建议
- 新增功能时遵循MVVM模式
- 服务层保持单一职责
- 使用依赖注入管理服务
- 异常处理要友好提示用户
- 重要操作记录日志
- UI样式统一使用资源字典
扩展点
- 添加新视图: Views文件夹
- 添加新服务: Services文件夹
- 自定义样式: Resources/Styles.xaml
- 配置参数: ConfigurationService