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 作用?

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

相关推荐
具身AGI9 分钟前
物理AI人类学习路线的答案
人工智能·学习
那年窗外下的雪.44 分钟前
AIDC 学习日志|第 21 天|EVPN 多归属故障演练与中断窗口定位
网络·git·学习
wuyk5551 小时前
从零吃透 MQTT 通信|第 5 章 MQTT 心跳保活机制深度优化,断线检测与智能自动重连
c语言·开发语言·stm32·学习
幼儿园蛋小黄1 小时前
基于 TCP 的嵌入式网络通信学习总结
网络协议·学习·tcp/ip
~kiss~1 小时前
大模型的四类Cache - KV, Prefix, Prompt and Semantic Caching
学习
Ray Wang1 小时前
RAG学习
学习
励志不掉头发的内向程序员2 小时前
【LibreCAD 2D架构】从鼠标点击到图形创建:RS_ActionDrawLine交互流程与状态机解析
开发语言·c++·qt·学习·系统架构·计算机外设·交互
Htr_2 小时前
Reflexio 使用指南:让 AI 智能体从每次交互中持续学习
人工智能·学习·交互
Chill602 小时前
ChatGPT桌面版打不开
学习
sunshine22 girl3 小时前
Java学习一 环境配置3 Idea的基本设置和插件
java·学习