ceb77e624e
feat: 重构 TodoList 架构,新增动态 API 与 MAUI 内嵌 Web 服务 feat:优化交互逻辑,优化发布流程
345 lines
14 KiB
Markdown
345 lines
14 KiB
Markdown
# TodoList 项目结构说明
|
|
|
|
## 项目概述
|
|
|
|
TodoList 是一个跨平台的待办事项管理应用,采用多种技术栈实现不同平台的客户端。项目包含 WPF 桌面应用、MAUI 跨平台应用、Web 前端以及后端 API 服务。
|
|
|
|
## 项目结构
|
|
|
|
```
|
|
TodoList/
|
|
├── docs/ # 项目文档目录
|
|
│ ├── 产品需求文档.md # 产品需求说明
|
|
│ ├── 产品需求文档-1.1.0.md # v1.1.0版本需求
|
|
│ ├── 技术设计文档.md # 技术架构设计
|
|
│ ├── 代码规范文档.md # 代码编写规范
|
|
│ └── 实现对比文档.md # 不同实现方案对比
|
|
│
|
|
├── src/ # 源代码目录
|
|
│ ├── TodoList.Api/ # 后端 API 项目 (ASP.NET Core)
|
|
│ │ ├── Controllers/ # API 控制器
|
|
│ │ │ └── TasksController.cs # 任务相关API端点
|
|
│ │ ├── Data/ # 数据库相关
|
|
│ │ │ ├── TodoDbContext.cs # EF Core 数据库上下文
|
|
│ │ │ └── Migrations/ # 数据库迁移文件
|
|
│ │ │ ├── 20260313044926_InitialCreate.cs
|
|
│ │ │ ├── 20260313044926_InitialCreate.Designer.cs
|
|
│ │ │ ├── 20260313092658_AddParentTaskId.cs
|
|
│ │ │ ├── 20260313092658_AddParentTaskId.Designer.cs
|
|
│ │ │ └── TodoDbContextModelSnapshot.cs
|
|
│ │ ├── Models/ # 数据模型
|
|
│ │ │ └── TaskModels.cs # 任务数据传输对象
|
|
│ │ ├── Repositories/ # 数据访问层
|
|
│ │ │ └── TaskRepository.cs # 任务仓储实现
|
|
│ │ ├── Services/ # 业务服务层
|
|
│ │ │ └── TaskService.cs # 任务业务逻辑
|
|
│ │ ├── Properties/ # 项目属性
|
|
│ │ │ └── launchSettings.json # 启动配置
|
|
│ │ ├── Program.cs # 应用程序入口
|
|
│ │ ├── appsettings.json # 应用配置
|
|
│ │ ├── appsettings.Development.json # 开发环境配置
|
|
│ │ ├── TodoList.Api.csproj # 项目文件
|
|
│ │ ├── TodoList.Api.http # HTTP 测试文件
|
|
│ │ └── todolist.db # SQLite 数据库文件
|
|
│ │
|
|
│ ├── TodoList.Core/ # 核心业务逻辑层
|
|
│ │ ├── Entities/ # 领域实体
|
|
│ │ │ ├── Task.cs # 任务实体
|
|
│ │ │ └── TaskPriority.cs # 任务优先级枚举
|
|
│ │ ├── Interfaces/ # 接口定义
|
|
│ │ │ ├── ITaskRepository.cs # 任务仓储接口
|
|
│ │ │ └── ITaskService.cs # 任务服务接口
|
|
│ │ ├── Class1.cs # 临时类文件
|
|
│ │ └── TodoList.Core.csproj # 项目文件
|
|
│ │
|
|
│ ├── TodoList.Maui/ # MAUI 跨平台应用
|
|
│ │ ├── Models/ # 数据模型
|
|
│ │ │ ├── HotKeyConfig.cs # 热键配置模型
|
|
│ │ │ └── QuickEntryData.cs # 快速输入数据模型
|
|
│ │ ├── Services/ # 服务层
|
|
│ │ │ ├── Platforms/ # 平台特定服务
|
|
│ │ │ │ ├── WindowsGlobalHotKeyService.cs # Windows热键服务
|
|
│ │ │ │ ├── MacGlobalHotKeyService.cs # macOS热键服务
|
|
│ │ │ │ └── MobileGlobalHotKeyService.cs # 移动端热键服务
|
|
│ │ │ ├── GlobalHotKeyServiceFactory.cs # 热键服务工厂
|
|
│ │ │ ├── HotKeySettingsService.cs # 热键设置服务
|
|
│ │ │ └── IGlobalHotKeyService.cs # 热键服务接口
|
|
│ │ ├── Views/ # 视图层
|
|
│ │ │ ├── MainPage.xaml # 主页面
|
|
│ │ │ ├── MainPage.xaml.cs
|
|
│ │ │ ├── QuickEntryPage.xaml # 快速输入页面
|
|
│ │ │ ├── QuickEntryPage.xaml.cs
|
|
│ │ │ ├── HotKeySettingsPage.xaml # 热键设置页面
|
|
│ │ │ └── HotKeySettingsPage.xaml.cs
|
|
│ │ ├── Platforms/ # 平台特定代码
|
|
│ │ │ ├── Windows/ # Windows 平台
|
|
│ │ │ │ ├── App.xaml
|
|
│ │ │ │ ├── App.xaml.cs
|
|
│ │ │ │ ├── Package.appxmanifest
|
|
│ │ │ │ └── app.manifest
|
|
│ │ │ ├── MacCatalyst/ # macOS 平台
|
|
│ │ │ │ ├── AppDelegate.cs
|
|
│ │ │ │ ├── Program.cs
|
|
│ │ │ │ ├── Info.plist
|
|
│ │ │ │ └── Entitlements.plist
|
|
│ │ │ ├── iOS/ # iOS 平台
|
|
│ │ │ │ ├── AppDelegate.cs
|
|
│ │ │ │ ├── Program.cs
|
|
│ │ │ │ ├── Info.plist
|
|
│ │ │ │ └── Resources/
|
|
│ │ │ │ └── PrivacyInfo.xcprivacy
|
|
│ │ │ └── Android/ # Android 平台
|
|
│ │ │ ├── MainActivity.cs
|
|
│ │ │ ├── MainApplication.cs
|
|
│ │ │ ├── AndroidManifest.xml
|
|
│ │ │ └── Resources/
|
|
│ │ │ └── values/
|
|
│ │ │ └── colors.xml
|
|
│ │ ├── Resources/ # 资源文件
|
|
│ │ │ ├── AppIcon/ # 应用图标
|
|
│ │ │ │ ├── appicon.svg
|
|
│ │ │ │ └── appiconfg.svg
|
|
│ │ │ ├── Fonts/ # 字体文件
|
|
│ │ │ │ ├── OpenSans-Regular.ttf
|
|
│ │ │ │ └── OpenSans-Semibold.ttf
|
|
│ │ │ ├── Images/ # 图片资源
|
|
│ │ │ │ └── dotnet_bot.png
|
|
│ │ │ ├── Splash/ # 启动画面
|
|
│ │ │ │ └── splash.svg
|
|
│ │ │ ├── Raw/ # 原始资源
|
|
│ │ │ │ └── AboutAssets.txt
|
|
│ │ │ └── Styles/ # 样式资源
|
|
│ │ │ ├── Colors.xaml
|
|
│ │ │ └── Styles.xaml
|
|
│ │ ├── Properties/ # 项目属性
|
|
│ │ │ └── launchSettings.json
|
|
│ │ ├── App.xaml # 应用程序
|
|
│ │ ├── App.xaml.cs
|
|
│ │ ├── AppShell.xaml # 应用外壳
|
|
│ │ ├── AppShell.xaml.cs
|
|
│ │ ├── MainPage.xaml # 主页面(备用)
|
|
│ │ ├── MainPage.xaml.cs
|
|
│ │ ├── MauiProgram.cs # MAUI 程序入口
|
|
│ │ ├── TodoList.Maui.csproj # 项目文件
|
|
│ │ ├── IMPLEMENTATION_SUMMARY.md # 实现总结
|
|
│ │ └── README.md # MAUI 项目说明
|
|
│ │
|
|
│ └── TodoList.Web/ # Web 前端项目 (Vue.js)
|
|
│ ├── public/ # 静态资源
|
|
│ │ ├── favicon.svg
|
|
│ │ └── icons.svg
|
|
│ ├── src/ # 源代码
|
|
│ │ ├── api/ # API 调用
|
|
│ │ │ ├── client.ts # HTTP 客户端配置
|
|
│ │ │ └── tasks.ts # 任务相关 API
|
|
│ │ ├── assets/ # 资源文件
|
|
│ │ │ ├── hero.png
|
|
│ │ │ ├── vite.svg
|
|
│ │ │ └── vue.svg
|
|
│ │ ├── components/ # Vue 组件
|
|
│ │ │ ├── HelloWorld.vue
|
|
│ │ │ ├── TaskList.vue # 任务列表组件
|
|
│ │ │ └── TaskItem.vue # 任务项组件
|
|
│ │ ├── services/ # 服务层
|
|
│ │ │ └── localStorageService.ts # 本地存储服务
|
|
│ │ ├── types/ # TypeScript 类型定义
|
|
│ │ │ └── task.ts # 任务类型
|
|
│ │ ├── App.vue # 根组件
|
|
│ │ ├── main.ts # 应用入口
|
|
│ │ └── style.css # 全局样式
|
|
│ ├── .vscode/ # VS Code 配置
|
|
│ │ └── extensions.json
|
|
│ ├── .gitignore
|
|
│ ├── index.html # HTML 入口
|
|
│ ├── package.json # Node.js 依赖配置
|
|
│ ├── tsconfig.json # TypeScript 配置
|
|
│ ├── tsconfig.app.json
|
|
│ ├── tsconfig.node.json
|
|
│ ├── vite.config.ts # Vite 构建配置
|
|
│ └── README.md # Web 项目说明
|
|
│
|
|
├── TodoList/ # WPF 桌面应用项目
|
|
│ ├── Converters/ # 值转换器
|
|
│ │ └── EnumDescriptionConverter.cs
|
|
│ ├── Models/ # 数据模型
|
|
│ │ └── TodoItem.cs
|
|
│ ├── Services/ # 服务层
|
|
│ │ ├── IDataService.cs # 数据服务接口
|
|
│ │ ├── FileDataService.cs # 文件数据服务
|
|
│ │ ├── SqliteDataService.cs # SQLite 数据服务
|
|
│ │ ├── GlobalShortcutService.cs # 全局快捷键服务
|
|
│ │ └── SettingsService.cs # 设置服务
|
|
│ ├── ViewModels/ # 视图模型
|
|
│ │ ├── MainViewModel.cs
|
|
│ │ └── QuickEntryViewModel.cs
|
|
│ ├── Views/ # 视图
|
|
│ │ ├── MainWindow.xaml # 主窗口
|
|
│ │ ├── MainWindow.xaml.cs
|
|
│ │ ├── QuickEntryWindow.xaml # 快速输入窗口
|
|
│ │ └── QuickEntryWindow.xaml.cs
|
|
│ ├── App.xaml # 应用程序
|
|
│ ├── App.xaml.cs
|
|
│ ├── AssemblyInfo.cs # 程序集信息
|
|
│ ├── BuildSetup.ps1 # 构建安装包脚本
|
|
│ ├── setup.iss # Inno Setup 安装脚本
|
|
│ ├── icon.ico # 应用图标
|
|
│ └── TodoList.csproj # 项目文件
|
|
│
|
|
├── TodoList.slnx # Visual Studio 解决方案文件
|
|
├── .gitattributes # Git 属性配置
|
|
├── .gitignore # Git 忽略文件配置
|
|
├── README.md # 项目说明文档
|
|
├── SCRIPTS_README.md # 脚本使用说明
|
|
├── start-service.ps1 # 启动服务脚本
|
|
├── stop-service.ps1 # 停止服务脚本
|
|
└── restart-service.ps1 # 重启服务脚本
|
|
```
|
|
|
|
## 技术栈说明
|
|
|
|
### TodoList (WPF 桌面应用)
|
|
- **框架**: WPF (Windows Presentation Foundation)
|
|
- **语言**: C# (.NET 8.0)
|
|
- **架构模式**: MVVM (Model-View-ViewModel)
|
|
- **数据存储**: SQLite (sqlite-net-pcl)
|
|
- **MVVM 框架**: CommunityToolkit.Mvvm
|
|
- **功能**: Windows 桌面应用,支持全局快捷键、快速输入等功能
|
|
|
|
### TodoList.Api (后端 API)
|
|
- **框架**: ASP.NET Core Web API
|
|
- **语言**: C# (.NET 10.0)
|
|
- **ORM**: Entity Framework Core
|
|
- **数据库**: SQLite
|
|
- **API 文档**: Swashbuckle (Swagger)
|
|
- **功能**: 提供 RESTful API,处理业务逻辑和数据持久化
|
|
|
|
### TodoList.Core (核心业务逻辑)
|
|
- **语言**: C# (.NET 10.0)
|
|
- **架构**: 领域驱动设计 (DDD)
|
|
- **功能**: 定义核心实体、接口和业务规则
|
|
|
|
### TodoList.Maui (跨平台应用)
|
|
- **框架**: .NET MAUI
|
|
- **语言**: C# (.NET 10.0)
|
|
- **支持平台**: Windows, macOS, iOS, Android
|
|
- **功能**: 跨平台原生应用,支持平台特定的热键功能
|
|
|
|
### TodoList.Web (Web 前端)
|
|
- **框架**: Vue.js 3
|
|
- **语言**: TypeScript
|
|
- **构建工具**: Vite
|
|
- **HTTP 客户端**: Axios
|
|
- **状态管理**: Pinia
|
|
- **功能**: 响应式 Web 界面,通过 HTTP API 与后端通信
|
|
|
|
## 项目依赖关系
|
|
|
|
```
|
|
TodoList.Web (前端)
|
|
↓ HTTP API
|
|
TodoList.Api (后端)
|
|
↓ 项目引用
|
|
TodoList.Core (核心层)
|
|
↓ EF Core
|
|
SQLite 数据库
|
|
```
|
|
|
|
## 开发环境要求
|
|
|
|
### 后端开发
|
|
- .NET 10 SDK
|
|
- Visual Studio 2022 或更高版本
|
|
- SQLite
|
|
|
|
### 前端开发
|
|
- Node.js 18+
|
|
- npm 或 yarn
|
|
|
|
### MAUI 开发
|
|
- Visual Studio 2022 17.8 或更高版本
|
|
- .NET MAUI 工作负载
|
|
- 各平台开发工具(Xcode, Android Studio 等)
|
|
|
|
### WPF 开发
|
|
- .NET 8 SDK
|
|
- Visual Studio 2022 或更高版本
|
|
- Windows 操作系统
|
|
|
|
## 启动方式
|
|
|
|
### 启动后端 API
|
|
```bash
|
|
cd src/TodoList.Api
|
|
dotnet restore
|
|
dotnet ef database update
|
|
dotnet run
|
|
```
|
|
|
|
### 启动 Web 前端
|
|
```bash
|
|
cd src/TodoList.Web
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
### 运行 WPF 应用
|
|
```bash
|
|
cd TodoList
|
|
dotnet run
|
|
```
|
|
|
|
### 运行 MAUI 应用
|
|
```bash
|
|
cd src/TodoList.Maui
|
|
dotnet build
|
|
```
|
|
|
|
## API 端点
|
|
|
|
- `GET /api/tasks` - 获取任务列表
|
|
- `GET /api/tasks/{id}` - 获取单个任务
|
|
- `POST /api/tasks` - 创建任务
|
|
- `PUT /api/tasks/{id}` - 更新任务
|
|
- `PATCH /api/tasks/{id}/complete` - 切换完成状态
|
|
- `DELETE /api/tasks/{id}` - 删除任务
|
|
|
|
## 数据库结构
|
|
|
|
### Tasks 表
|
|
- Id (主键)
|
|
- Title (标题)
|
|
- Description (描述)
|
|
- Priority (优先级: High, Medium, Low)
|
|
- IsCompleted (完成状态)
|
|
- DueDate (截止日期)
|
|
- CreatedAt (创建时间)
|
|
- UpdatedAt (更新时间)
|
|
- ParentTaskId (父任务ID,支持子任务)
|
|
|
|
## 脚本说明
|
|
|
|
- `start-service.ps1` - 启动后端服务
|
|
- `stop-service.ps1` - 停止后端服务
|
|
- `restart-service.ps1` - 重启后端服务
|
|
- `TodoList/BuildSetup.ps1` - 构建 WPF 安装包
|
|
|
|
## 版本历史
|
|
|
|
- **v1.0.0**: 初始 WPF 版本
|
|
- **v1.1.0**: 重构为 MAUI + WebView 架构,实现跨平台支持
|
|
|
|
## 注意事项
|
|
|
|
1. WPF 项目仅支持 Windows 平台
|
|
2. MAUI 项目支持多平台,但需要相应的开发环境
|
|
3. Web 项目需要先启动后端 API 服务
|
|
4. SQLite 数据库文件位于 `src/TodoList.Api/todolist.db`
|
|
5. 首次运行需要执行数据库迁移命令
|
|
|
|
## 扩展阅读
|
|
|
|
- [产品需求文档](./docs/产品需求文档.md)
|
|
- [技术设计文档](./docs/技术设计文档.md)
|
|
- [代码规范文档](./docs/代码规范文档.md)
|
|
- [实现对比文档](./docs/实现对比文档.md)
|