浙江大学星弦科幻协会的工作调度中心——从 Python 版迁移到 C#/.NET + Avalonia 的桌面应用。管理干员、待办与工作记录,支持自动分配、临时/永久弃用、CSV 导入导出。
本项目是
Star_string_workstation(Python NiceGUI + SQLAlchemy/SQLite)的 Avalonia 桌面迁移版。 功能验收以《功能说明文档.md》为基线,技术选型与迁移动机详见《迁移选型文档.md》(见原仓库)。
原系统(Python/NiceGUI 版本)存在三大痛点,本次迁移逐一解决:
| 痛点 | 表现 | 迁移后的对策 |
|---|---|---|
| P1 配置运行繁琐 | 需自备 Python 环境、venv、装依赖才能启动 | self-contained 发布,单 exe 双击即用,端用户零环境 |
| P2 库依赖脆弱 | NiceGUI 等库"版本一变就炸",无锁定感 | C# 编译期静态链接 + packages.lock.json 锁版本,产物自含 |
| P3 设计不当 | 架构不清晰,改一处易引全局副作用 | MVVM 分层,业务逻辑独立成服务层,可单元测试 |
技术选型结论:C#/.NET + Avalonia 桌面应用(self-contained 单 exe)、MVVM 分层、DataGrid 承载三张表、SQLite 持久化、服务层原样重建分配算法与业务不变式。
| 层 | 技术 |
|---|---|
| UI | Avalonia 12.1 + CommunityToolkit.Mvvm 8.4(XAML / MVVM / Fluent 主题) |
| 数据 | Microsoft.Data.Sqlite 10 + Dapper 2.1(SQLite,UoW 显式事务) |
| CSV | CsvHelper 33.1 |
| 测试 | xUnit(单元 + 集成 + ViewModel) |
依赖方向(架构守卫测试固化):UI→Core、UI→Infrastructure、Infrastructure→Core;Core 零外部依赖。
- 六页导航:概览 / 干员 / 待办 / 分配 / 记录 / 设置
- 三张表管理:干员 / 待办 / 记录,DataGrid 排序、批量多选、行内操作按钮
- 分配:自动分配(5 条业务规则,预览后确认)/ 手动指定 / 手动导入
- 弃用闭环:临时弃用(默认 +7 天)/ 永久弃用 / 到期自动启用,
work_count增减不变式 - 记录:手动打标签、删除时回退工作量
- CSV 可运维性:严格表头契约、四种编码检测、"清空+导入"单事务、导出
- 设置页:数据计数、重建表、清空、导入导出、存储位置
- 单文件发布:约 50MB 单 exe,含应用图标
AvaloniaSSWorkstation.slnx
├── AvaloniaSSWorkstation/ # Avalonia 12.1 UI(Views/ViewModels/导航/DI/提示条/确认对话框)
├── AvaloniaSSWorkstation.Core/ # 实体、领域常量、领域异常、仓库接口、UoW、业务服务(纯 .NET)
├── AvaloniaSSWorkstation.Infrastructure/ # SQLite(Dapper)、CSV(CsvHelper)、文件系统
├── AvaloniaSSWorkstation.Tests/ # 单元 + 集成 + ViewModel 测试(xunit)
├── docs/ # 各里程碑决策记录与验收清单
└── tools/seed-data/ # 人工验收用测试数据工具(独立于 slnx)
# 还原
dotnet restore AvaloniaSSWorkstation.slnx
# 构建
dotnet build AvaloniaSSWorkstation.slnx -c Release
# 测试(160+ 用例,0 警告 0 错误基线)
dotnet test AvaloniaSSWorkstation.slnx -c Release
dotnet publish AvaloniaSSWorkstation/AvaloniaSSWorkstation.csproj -c Release -r win-x64 --self-contained true \
-p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true \
-p:DebugType=None -p:DebugSymbols=false -p:EnableCompressionInSingleFile=true \
-o artifacts/publish-win-x64
首次运行自动在 %LOCALAPPDATA%/AvaloniaSSWorkstation/data/scheduler.db 建库。
| 阶段 | 内容 | 状态 |
|---|---|---|
| M0 | 架构就绪(恢复/构建/测试/发布 spike) | ✅ 完成 |
| M1 | 领域模型与数据库纵向切片(三表/schema v1/唯一约束/UoW) | ✅ 完成 |
| M2 | 业务服务与不可变规则(自动分配 5 规则/work_count 不变式) | ✅ 完成 |
| M3 | 应用壳、导航与共性交互(DI/六页导航/主题/提示条/确认框) | ✅ 完成 |
| M4 | 干员管理闭环(DataGrid 多选/弹窗/启弃用/一键全部启用) | ✅ 完成 |
| M5 | 待办、分配与记录闭环(自动预览确认/手动指定/手动导入/记录回退) | ✅ 完成 |
| M6 | 设置、CSV 与数据可运维性(CSV 契约/编码检测/单事务导入导出/设置页) | ✅ 完成 |
| M7 | 稳定化、发布与切换 | ⏳ 待批准 |
MIT © 浙江大学星弦科幻协会