# 1. Domain Service(领域服务)与 Application Service(应用服务)的清晰边界中业务规则 vs 编排 A 应用服务负责编排与事务,领域服务承载业务规则 ✓ 正确答案 B 领域服务负责用例编排,应用服务承载业务规则 C 两者职责相同可互换 D 业务规则应放在应用服务的 DTO 中
# 2. Command 与 Query 的分离(CQS)在 Application Service 的实现 A 命令方法改变状态、查询方法读取数据,两者分开 ✓ 正确答案 B 命令方法应返回完整领域对象 C 查询方法可以同时修改状态 D CQS 与 CQRS 完全等同
# 3. 事务边界与 Application Service 的对应中@Transactional 应该在 Service 层而非 Repository 层 A @Transactional 应放在 Repository 层 B 每个仓储方法都应独立开事务 C 事务边界与用例对应,@Transactional 应放在 Application Service 层 ✓ 正确答案 D 查询方法也应强制加事务
# 4. Application Service 的「事务内远程调用」反模式中事务中调用外部 API 或发消息的边界在哪,如何用本地事务 + Outbox 模式拆分保证一致性? A 事务内调用外部 API 是推荐做法 B 远程调用应直接放在事务内保证一致 C 用本地事务 + Outbox 把业务与事件同库写入,再由 relay 异步发布,避免事务内远程调用 ✓ 正确答案 D Outbox 模式需要在事务内等待外部 API 返回
# 5. Repository 接口属于领域层,实现属于基础设施层的依赖倒置 A Repository 接口属于领域层,实现属于基础设施层,体现依赖倒置 ✓ 正确答案 B Repository 接口应定义在基础设施层 C 领域层应直接依赖 ORM 实现 D Repository 接口与实现应放在同一层
# 6. Repository 模式(Fowler P of EAA)的核心中内存对象与持久化的解耦 A Repository 让领域层直接操作 SQL B Repository 用集合语义解耦内存对象与持久化细节 ✓ 正确答案 C Repository 是数据库唯一入口 D Repository 只负责查询,不负责保存
# 7. Specification Pattern(Evans)与 Repository.findBy(Specification) 的协作 A Specification 只能用于内存过滤 B 规格对象不能组合 C Specification 封装业务规则,Repository.findBy(Specification) 将其翻译为持久化查询 ✓ 正确答案 D Repository 不需要联合 Specification
# 8. Application Service 与 Adapter(Controller、Job、CLI)的协作模式 A Adapter 承载业务规则,Service 只做协议转换 B Adapter 负责协议适配,Application Service 承载用例逻辑,可被多入口复用 ✓ 正确答案 C 每个 Adapter 必须实现一套独立业务逻辑 D Application Service 应直接依赖 HTTP 协议
# 9. Application Service 的"工作单元"(Unit of Work)模式 A 工作单元与驱动不相关 B 工作单元让每个变更立即落库 C 工作单元跟踪事务内的变更并在结束时统一提交 ✓ 正确答案 D 工作单元只负责查询
# 10. 应用服务与领域服务的边界中用例 vs 领域逻辑? A 用例属于领域服务,领域逻辑属于应用服务 B 应用服务对应用例与编排,领域服务承载领域逻辑与规则 ✓ 正确答案 C 两者都承载业务规则 D 领域服务负责事务管理
# 11. Repository 查询能力膨胀的治理中当仓储方法超过合理数量且多为组合查询时,应引入 CQRS 读模型还是保留仓储,判断依据与迁移路径是什么? A 所有复杂查询都应塞进仓储 B 读模型不能独立于仓储 C 仓储方法越多越好 D 聚合加载用仓储,复杂组合/报表查询应引入 CQRS 读模型 ✓ 正确答案
# 12. Repository 的分页与排序(Pageable、Sort)的边界 A 分页排序应在领域层手工实现 B 业务过滤应写在仓储 SQL 中 C 聚合加载用仓储按 ID,列表查询分页排序可在仓储或读模型完成 ✓ 正确答案 D 仓储必须禁止分页
# 13. 仓储模式中集合语义与基础设施隔离? A 仓储以集合语义抽象聚合存取,隔离领域层与基础设施 ✓ 正确答案 B 仓储直接暴露 SQL 给领域层 C 仓储实现必须放在领域层 D 领域层需要知道数据库连接信息
# 14. 事务边界中应用服务层的事务管理? A 事务应放在领域服务内部 B 事务边界应对应用例,@Transactional 放在应用服务层,避免长事务 ✓ 正确答案 C 每个仓储方法都应独立开事务 D 查询方法必须加写事务
# 15. 领域服务 vs 领域对象的方法? A 领域服务应持有大量状态 B 跨多个聚合协作的规则应放领域服务,单聚合状态逻辑放实体方法 ✓ 正确答案 C 所有业务逻辑都应放实体方法 D 领域服务替代所有实体方法
# 16. 仓储与查询中读模型的简化? A 所有复杂查询都应加载完整聚合 B 复杂查询用专门优化过的读模型,写路径走仓储,两者解耦 ✓ 正确答案 C 读模型与写模型必须共用同一结构 D 读模型不能加索引
# 17. 仓储的实现中 ORM 与原生 SQL? A 原生 SQL 不能用在仓储中 B 只能全部用 ORM C 常规持久化用 ORM,复杂/性能敏感查询用原生 SQL,封装在仓储实现内 ✓ 正确答案 D 领域层应直接写原生 SQL