Day21 第三周总结 + 用户模块收官复盘(可直接当学习笔记)

一、本周完整学习路线复盘

Day18 仓储模式 Repository Pattern

  • 掌握 IRepository<T> 泛型仓储接口
  • 封装 RepositoryBase<T> 通用 EF 实现
  • 理解 DbContext.Set<T>() 泛型获取表
  • 学会基础 CRUD、条件查询、分页、批量删除 / 更新 (EF Core 7+ ExecuteDelete/ExecuteUpdate)
  • 规范分层:Domain 抽象仓储、Infrastructure 实现仓储

Day19 Service 业务层封装

  • 分层铁律:Controller 只收参、Service 写业务、Repository 只操作数据
  • 引入 IUnitOfWork 工作单元 统一管理 DbContext + 事务
  • 解决自增 ID 痛点:
    1. 开事务
    2. Add 实体
    3. SaveChanges() 拿自增 ID(不提交事务)
    4. 继续添加关联数据
    5. 最后统一 Commit,异常 Rollback
  • 完成用户模块:新增 / 修改 / 删除 / 分页 / 批量禁用 / 登录

Day20 AutoMapper 对象映射

  • 分清 Entity / DTO / VO 职责
    • Entity:只对应数据库,不对外暴露
    • DTO:前端入参(Create/Update/Query)
    • VO:后端返前端出参,隐藏敏感字段(密码)
  • 学会 Profile 统一配置映射规则
    • 同名字段自动映射
    • ForMember 字段不同名映射、Ignore 忽略字段
    • 单个对象、集合自动映射
  • .NET 新版 AutoMapper 无废弃包注册方式
  • 改造所有接口,杜绝手动赋值,全程 AutoMapper

Day21 本周收官

  • 整套用户模块 API 全部完工
  • 分层架构闭环:Controller → Service → UnitOfWork → Repository → DbContext
  • 准备 Git 版本提交 + EF Core & 仓储高频面试复习

二、已完成用户模块功能清单

  1. 根据 ID 查询用户 + 嵌套角色信息
  2. 多条件动态分页查询用户
  3. 新增用户 + 分配角色(事务保障)
  4. 修改用户 + 重置角色关联(事务)
  5. 删除用户 + 级联删除角色关联(事务)
  6. 批量禁用用户(EF 批量更新)
  7. 账号密码登录校验
  8. 全部接口完成 DTO→Entity→VO AutoMapper 映射
  9. 统一返回封装 R<T>、分页返回统一结构

三、项目架构最终定型(你现在的企业级结构)

复制代码
Domain
  Entities 实体
  Repositories 仓储接口
Infrastructure
  Repositories 仓储实现
  UnitOfWork 工作单元
  AppDbContext 上下文
Application
  Dtos 入参
  Vos 出参
  Services 业务服务
  AutoMapper 映射Profile
API
  Controllers 接口入口

核心规范:

  • Service 不直接注入 DbContext,只依赖 IUnitOfWork
  • 仓储只操作实体,不处理业务、不返回 R<T>
  • 禁止直接返回 Entity 给前端,一律用 VO
  • 所有业务、事务、参数校验统一放 Service

四、Git 提交规范(直接照着提交)

提交描述文案

复制代码
第三周完结:完成用户完整模块
1. 实现泛型仓储+工作单元事务
2. 封装UserService完整业务逻辑
3. 接入AutoMapper实现DTO/VO/Entity映射
4. 完成用户CRUD、分页、批量操作、登录接口
5. 规范分层架构,符合企业.NET后端标准

提交前检查

  1. 无冗余 NotImplementedException 未实现方法
  2. 所有异步方法 async/await 规范
  3. 事务逻辑正确、能拿自增 ID、可正常回滚
  4. AutoMapper 映射无报错,接口可 Postman 正常调通

五、EF Core + 仓储 高频面试必背(精简版)

  1. 为什么用仓储模式?

    解耦 EF Core 与业务层、复用通用 CRUD、面向接口易测试、统一数据访问规范,避免 Service 直接依赖 DbContext。

  2. Repository 和 Service 区别?

    Repository:单表数据访问,只操作实体;Service:业务逻辑、事务、多仓储协调、DTO 转换、参数校验。

  3. 工作单元 UOW 作用?

    共享同一个 DbContext、统一管理事务、多仓储操作保证原子性,统一 SaveChanges 与提交回滚。

  4. 新增实体拿自增 ID 为什么可以在事务内 SaveChanges?

    SaveChanges 只是执行 SQL 占用自增编号、写入事务临时区,未 Commit 前仍可回滚,不会真正落库。

  5. EF Core ExecuteDelete/ExecuteUpdate 优势?

    无需先查询加载实体,直接生成 SQL 批量删改,性能更高,无追踪开销。

  6. 为什么禁止直接返回 Entity 给前端?

    暴露数据库敏感字段(密码、隐私字段)、字段冗余、后期数据库变更会影响前端,用 VO 隔离更安全易维护。

  7. AutoMapper Profile 作用?

    集中管理所有映射规则,统一配置字段映射、忽略、别名映射,解耦业务与映射逻辑。

相关推荐
LuminousCPP9 小时前
从零开始学 C++(三):类和对象入门|从 struct 到 class,理解封装、对象与 this 指针
c++·笔记·学习·类和对象
传奇开心果编程10 小时前
【Flutter入门练中学】第11课:状态管理进阶与声明式路由
android·学习·flutter·ui·ios
承渊政道10 小时前
Linux系统学习【进程信号详细解析——认识、产生、保存以及捕捉信号】
linux·学习·ubuntu·ssh·vs code·进程信号
个 人 练 习 生11 小时前
C++中的内存管理
开发语言·c++·经验分享·学习
浩瀚地学11 小时前
deepagents学习打卡day08
经验分享·笔记·python·学习·agent
艾莉丝努力练剑11 小时前
【AI大模型接入SDK】ChatSDK整体实现
网络·c++·人工智能·学习·架构
励志不掉头发的内向程序员11 小时前
【从零写一个CAD 02】画完第一条线之后:实体容器、Esc 取消,和按了没反应的键盘
开发语言·c++·qt·学习·系统架构
艾莉丝努力练剑12 小时前
【AI大模型接入SDK】ChatSDK架构设计与实现
网络·c++·人工智能·学习·语言模型
UIU11418 小时前
递归算法与汉诺塔
c++·学习·算法·c#·递归