知识卡片
远程服务用辅助类消除异常处理与状态码的重复
内容
实现北向网关远程服务(如REST风格)时,各服务方法虽契约不同,但实现大同小异:执行对应应用服务、捕获异常、根据结果返回不同状态码。为避免重复代码,可利用应用层定义的应用异常类别,用catch捕获不同类型的应用异常实现相似逻辑。作者在ddd-core模块定义了Resources辅助类,用链式API(with(requestType).onSuccess(…).onError(…).onFailed(…).execute(supplier/runnable))统一处理:不同异常类别对应的状态码由调用者传入,日志描述也由调用者提供,execute的重载对应返回不同响应对象的场景。引入后TicketResource、TrainingResource的实现被大幅精简。发散:分层设计的红利之一,是上层能凭下层的异常分类做统一的模板化处理——异常分层不只为清晰,更为可复用的横切逻辑。
参考来源
- 位置:《解构领域驱动设计》第20章 20.3.5(源文件:_epub-src/OEBPS/033.xhtml)
- 结论依据:原文说明远程服务实现相似、用Resources辅助类基于应用异常分类消除重复代码。
- 原始内容:为了避免重复代码,应用层定义的应用异常类别就派上了用场,利用catch捕获不同类型的应用异常,就可以实现相似的执行逻辑。