Files
TodoList/项目结构说明.md
T
ShaoHua ceb77e624e feat:基础功能实现
feat: 重构 TodoList 架构,新增动态 API 与 MAUI 内嵌 Web 服务
feat:优化交互逻辑,优化发布流程
2026-04-05 00:53:42 +08:00

14 KiB

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

cd src/TodoList.Api
dotnet restore
dotnet ef database update
dotnet run

启动 Web 前端

cd src/TodoList.Web
npm install
npm run dev

运行 WPF 应用

cd TodoList
dotnet run

运行 MAUI 应用

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. 首次运行需要执行数据库迁移命令

扩展阅读