# 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)