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

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

相关推荐
一只小菜鸡..7 小时前
南京大学 操作系统 (JYY) 学习笔记:进程、系统调用与状态机管理
笔记·学习
天国梦10 小时前
2026英语教学系统选型实战:AI如何让备课效率提升42%?天学网技术落地全解析
人工智能·学习
维克兜率天10 小时前
【维克】大数定律与中心极限定理:为什么长期均值终将回归?
经验分享·学习·金融·概率论
中微极客11 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法
吃好睡好便好12 小时前
MATLAB中图像的读取、写入和显示
开发语言·图像处理·学习·计算机视觉·matlab
~kiss~12 小时前
大模型中的强化学习算法和对齐算法的区别
学习
MartinYeung513 小时前
[论文学习]InjecAgent:工具集成大语言模型智能体的间接提示注入基准测试
网络·学习·语言模型
sean90813 小时前
Vim 学习 - 快速删除/修改
学习·vim
小黄人软件13 小时前
如何解决不想学、学不会、学不进去,吸收内化不了学的东西,怎么办?如何真正建立“知识内化系统“?不输出,不学习
学习
个 人 练 习 生14 小时前
strcmp与strstr函数的模拟实现
c语言·开发语言·经验分享·学习·程序人生