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

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

相关推荐
灵性(๑>ڡ<)☆1 小时前
Java学习笔记 --面向对象进阶
java·笔记·学习
β添砖java2 小时前
Ollama工具学习
学习
小巧的砖头2 小时前
使用SVN+CruiseControl+ANT实现持续集成之一
学习·算法
俭朴的奇异果3 小时前
MongoDB实战开发 【零基础学习,附完整Asp.net示例】
学习·mongodb·asp.net
承渊政道3 小时前
【Python学习】(了解Python背景知识、搭建 Python 环境以及安装PyCharm)
python·学习·pycharm·搭建python环境
东京老树根3 小时前
SAP学习笔记 - MM模块06 - 库存物料,消耗物料,物料类型NLAG,如何确定会计科目,无物料信息记录(通过物料组),排序字符串,消耗物料的收货
学习
茯苓gao16 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
HERR_QQ19 小时前
强化学习的数学原理 学习笔记
人工智能·笔记·学习·自动驾驶
MartinYeung520 小时前
[论文学习]DP-Fusion:面向大语言模型的令牌级差分隐私推理-深度解析
人工智能·学习·语言模型
zwenqiyu21 小时前
非线性字符串数据结构串讲
数据结构·c++·学习·算法