# Learn **Repository Path**: liang-cao/learn ## Basic Information - **Project Name**: Learn - **Description**: 学习的仓库 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-22 - **Last Updated**: 2025-07-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 软件架构学习路径 ## 项目介绍 这是一个基于.NET 8 WPF的软件架构学习项目,通过实际编码实践来掌握软件架构的核心概念和设计模式。 ## 技术栈 - .NET 8 - WPF (Windows Presentation Foundation) - C# ## 项目结构详解 ### 🏗️ 分层架构设计 我们采用经典的**四层架构**设计,遵循**依赖倒置**原则: ``` Start/ ├── src/ # 源代码根目录 │ ├── Core/ # 🟦 核心业务层 (Domain Layer) │ │ ├── Models/ # 领域模型 │ │ └── Interfaces/ # 业务接口定义 │ ├── Application/ # 🟩 应用服务层 (Application Layer) │ │ ├── Services/ # 应用服务 │ │ └── DTOs/ # 数据传输对象 │ ├── Infrastructure/ # 🟨 基础设施层 (Infrastructure Layer) │ │ └── Data/ # 数据访问实现 │ ├── Presentation/ # 🟪 表示层 (Presentation Layer) │ │ ├── Views/ # WPF视图 (.xaml) │ │ └── ViewModels/ # MVVM的ViewModel │ └── Tests/ # 🧪 测试项目 ├── docs/ # 📚 文档目录 │ ├── architecture/ # 架构设计文档 │ ├── patterns/ # 设计模式示例 │ └── practices/ # 最佳实践文档 └── examples/ # 💡 代码示例 ``` ### 📋 各层详细说明 #### 🟦 Core 层 - 核心业务层 **职责**: 包含业务实体和业务规则,是整个系统的核心 **依赖**: 不依赖任何其他层 **内容**: - `Models/` - 领域模型 - 业务实体 (Entity) - 值对象 (Value Object) - 领域事件 (Domain Event) - `Interfaces/` - 业务接口 - 仓储接口 (Repository Interface) - 领域服务接口 (Domain Service Interface) **示例类**: ```csharp // Models/Task.cs - 任务实体 // Interfaces/ITaskRepository.cs - 任务仓储接口 ``` #### 🟩 Application 层 - 应用服务层 **职责**: 协调业务逻辑,处理用例场景 **依赖**: 依赖Core层 **内容**: - `Services/` - 应用服务 - 用例实现 - 业务流程编排 - `DTOs/` - 数据传输对象 - 请求/响应模型 - 视图模型数据 **示例类**: ```csharp // Services/TaskService.cs - 任务应用服务 // DTOs/TaskDto.cs - 任务数据传输对象 ``` #### 🟨 Infrastructure 层 - 基础设施层 **职责**: 实现技术细节,如数据持久化 **依赖**: 依赖Core层 **内容**: - `Data/` - 数据访问 - 仓储模式实现 - 数据库上下文 - 实体映射配置 **示例类**: ```csharp // Data/TaskRepository.cs - 任务仓储实现 // Data/AppDbContext.cs - 数据库上下文 ``` #### 🟪 Presentation 层 - 表示层 **职责**: 用户界面和用户交互 **依赖**: 依赖Application层 **内容**: - `Views/` - WPF视图 - XAML界面文件 - 用户控件 - `ViewModels/` - 视图模型 - MVVM的ViewModel - 命令绑定 - 属性通知 **示例类**: ```csharp // Views/MainWindow.xaml - 主窗口视图 // ViewModels/MainViewModel.cs - 主窗口视图模型 ``` #### 🧪 Tests 层 - 测试项目 **职责**: 确保代码质量和功能正确性 **内容**: - 单元测试 - 集成测试 - UI测试 ### 📐 架构原则 #### 1. 依赖方向 (Dependency Direction) ``` Presentation → Application → Core ← Infrastructure ``` - **Core层**: 不依赖任何其他层 - **Application层**: 只依赖Core层 - **Infrastructure层**: 依赖Core层,实现Core定义的接口 - **Presentation层**: 依赖Application层 #### 2. SOLID 原则应用 - **S** - 单一职责: 每个类只有一个变化原因 - **O** - 开闭原则: 对扩展开放,对修改关闭 - **L** - 里氏替换: 子类可以替换父类 - **I** - 接口隔离: 接口应该小而专一 - **D** - 依赖倒置: 依赖抽象而非具体实现 #### 3. MVVM 模式 ``` View ←→ ViewModel ←→ Model ``` - **View**: 纯UI,不包含业务逻辑 - **ViewModel**: 视图状态管理,命令处理 - **Model**: 业务数据和逻辑 ## 学习路径 ### 🚀 Task模型演进式学习 (循序渐进) 为了避免学习曲线过于陡峭,我们将Task模型分为6个演进版本,每个版本都有明确的学习目标: #### 版本1:最基础的POCO类 ⭐ 当前版本 - **学习目标**: 理解基本的类和属性概念 - **预计时间**: 第1天 - **关键概念**: - 类的定义和实例化 - 公有属性的使用 - 基础构造函数 - **代码特点**: 简单的C#类,所有属性都是公有的,可以随意修改 #### 版本2:加入枚举和扩展属性 - **学习目标**: 理解枚举类型和可空类型 - **预计时间**: 第2-3天 - **关键概念**: - 枚举的定义和使用 - 可空类型 (DateTime?) - 默认值设置 - **代码特点**: 添加TaskStatus枚举,更多业务属性 #### 版本3:添加简单的业务方法 - **学习目标**: 理解行为封装概念 - **预计时间**: 第4-5天 - **关键概念**: - 方法封装行为 - 业务逻辑的基本实现 - 方法命名约定 - **代码特点**: 用方法而不是直接修改属性 #### 版本4:添加验证和异常处理 - **学习目标**: 理解业务规则和异常处理 - **预计时间**: 第6-8天 - **关键概念**: - 业务规则验证 - 异常的使用 - 状态检查和控制 - **代码特点**: 状态验证,异常抛出 #### 版本5:引入封装和私有setter - **学习目标**: 理解封装原则 - **预计时间**: 第2周 - **关键概念**: - 封装的重要性 - 访问修饰符 - 不变性保护 - **代码特点**: 私有setter,通过方法修改状态 #### 版本6:最终DDD版本 (高阶) - **学习目标**: 理解领域驱动设计 - **预计时间**: 第3-4周 - **关键概念**: - 领域驱动设计概念 - 工厂方法模式 - 聚合根和实体 - **代码特点**: 工厂方法,丰富的业务逻辑,完整的DDD实现 ### 阶段一:基础架构模式 (1-2周) #### 1.1 分层架构 (Layered Architecture) - **目标**: 理解和实现三层架构 - **实践项目**: 构建一个简单的任务管理应用 - **关键概念**: - 表示层 (Presentation Layer) - 业务逻辑层 (Business Logic Layer) - 数据访问层 (Data Access Layer) - **学习重点**: - 层与层之间的依赖关系 - 数据传输对象 (DTO) - 服务接口设计 #### 1.2 MVC/MVP/MVVM 模式 - **目标**: 掌握WPF中的MVVM模式 - **实践项目**: 重构任务管理应用使用MVVM - **关键概念**: - Model-View-ViewModel - 数据绑定 (Data Binding) - 命令模式 (Command Pattern) - 属性变更通知 (INotifyPropertyChanged) ### 阶段二:核心设计模式 (2-3周) #### 2.1 创建型模式 - **单例模式** (Singleton): 配置管理器 - **工厂方法** (Factory Method): 服务创建 - **抽象工厂** (Abstract Factory): 跨平台UI组件 - **建造者模式** (Builder): 复杂对象构建 #### 2.2 结构型模式 - **适配器模式** (Adapter): 第三方服务集成 - **装饰器模式** (Decorator): 功能增强 - **外观模式** (Facade): 简化复杂接口 - **组合模式** (Composite): 树形结构处理 #### 2.3 行为型模式 - **观察者模式** (Observer): 事件通知 - **策略模式** (Strategy): 算法切换 - **命令模式** (Command): 操作封装 - **状态模式** (State): 状态管理 ### 阶段三:架构原则与实践 (2-3周) #### 3.1 SOLID 原则 - **S** - 单一职责原则 (Single Responsibility Principle) - **O** - 开闭原则 (Open/Closed Principle) - **L** - 里氏替换原则 (Liskov Substitution Principle) - **I** - 接口隔离原则 (Interface Segregation Principle) - **D** - 依赖倒置原则 (Dependency Inversion Principle) #### 3.2 依赖注入 (Dependency Injection) - **目标**: 实现IoC容器 - **实践**: 使用Microsoft.Extensions.DependencyInjection - **关键概念**: - 控制反转 (Inversion of Control) - 依赖注入容器 - 服务生命周期管理 #### 3.3 整洁架构 (Clean Architecture) - **目标**: 理解六边形架构 - **实践项目**: 重构应用使用整洁架构 - **关键概念**: - 核心业务逻辑独立性 - 端口与适配器 - 依赖方向控制 ### 阶段四:高级架构模式 (3-4周) #### 4.1 领域驱动设计 (Domain-Driven Design) - **聚合根** (Aggregate Root) - **值对象** (Value Object) - **领域服务** (Domain Service) - **领域事件** (Domain Event) - **仓储模式** (Repository Pattern) #### 4.2 CQRS 与 Event Sourcing - **命令查询职责分离** (CQRS) - **事件溯源** (Event Sourcing) - **实践**: 实现简单的事件存储 #### 4.3 微服务架构思想 - **服务拆分原则** - **服务间通信** - **数据一致性** - **分布式事务** ### 阶段五:架构质量与测试 (2-3周) #### 5.1 单元测试架构 - **测试驱动开发** (TDD) - **模拟对象** (Mock Objects) - **测试替身** (Test Doubles) #### 5.2 集成测试 - **端到端测试** - **合约测试** - **性能测试** #### 5.3 代码质量 - **代码审查** - **静态分析** - **技术债务管理** ## 实践项目规划 ### 项目1: 任务管理系统 (Todo Application) - 当前项目 - **使用阶段**: 阶段一、二 - **功能**: 增删改查任务、分类管理、状态跟踪 - **架构重点**: 分层架构 + MVVM模式 ### 项目2: 电商系统 (E-commerce System) - **使用阶段**: 阶段三、四 - **功能**: 商品管理、订单处理、支付集成、库存管理 - **架构重点**: 整洁架构 + DDD ### 项目3: 博客系统 (Blog System) - **使用阶段**: 阶段五 - **功能**: 文章发布、评论系统、用户管理、权限控制 - **架构重点**: 测试驱动 + 质量保障 ## 学习资源 ### 书籍推荐 1. 《设计模式:可复用面向对象软件的基础》 2. 《架构整洁之道》 3. 《领域驱动设计》 4. 《企业应用架构模式》 5. 《重构:改善既有代码的设计》 ### 在线资源 - Microsoft .NET 架构指南 - Clean Architecture 官方文档 - 设计模式在线资源 ## 学习进度跟踪 - [x] 项目结构创建 - [ ] 🚀 Task模型演进学习 - [ ] 版本1:基础POCO类 ⭐ 当前版本 - [ ] 版本2:枚举和扩展属性 - [ ] 版本3:业务方法 - [ ] 版本4:验证和异常 - [ ] 版本5:封装原则 - [ ] 版本6:DDD设计 - [ ] 阶段一:基础架构模式 - [ ] 1.1 分层架构实现 - [ ] 1.2 MVVM模式应用 - [ ] 阶段二:核心设计模式 - [ ] 阶段三:架构原则与实践 - [ ] 阶段四:高级架构模式 - [ ] 阶段五:架构质量与测试 ## 下一步 现在开始**Task模型演进学习**: 1. ✅ 创建版本1:最基础的POCO类 2. 理解类和属性的基本概念 3. 练习创建和使用简单的Task对象 4. 为版本2做准备(枚举和扩展属性) **版本1学习重点**: - 理解什么是类和对象 - 学会定义属性和构造函数 - 练习实例化和使用对象 ## 贡献指南 欢迎提交学习笔记、代码示例和改进建议! 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/new-pattern`) 3. 提交改动 (`git commit -am 'Add new pattern example'`) 4. 推送到分支 (`git push origin feature/new-pattern`) 5. 创建 Pull Request --- **记住**: 软件架构不仅仅是技术,更是关于如何组织代码、管理复杂性和支持业务需求的艺术。通过实践学习,循序渐进!