领域服务、应用服务与仓储

共 17 题
#

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