c# - 多个 DAC 和 SAC 调用的设计模式
问题描述
场景- 请求验证后,我需要
调用数据库并更新记录。基于执行此数据库调用和请求数据的特定条件,我将调用Service1。
执行此步骤后,我将调用另一个数据库并从请求中更新记录。
最后我会调用审计服务来保存交易细节。
这可以在正常的代码结构中实现。但我非常有信心在第 1 步或第 2 步之后会有即插即用,即,在第 1 步/第 2 步(待定)之后的下一个版本中将引入数据库/服务调用。
我决定选择责任链。
问题
- 无论何时生成操作中断/异常,代码都应停止执行。
- 在单个 Logging 对象下,我很难处理顺序调用。
- 对于第 1 步的条件服务调用,操作链的动态修改有点复杂,因为我必须依赖从 AbstractionHandler 返回的单一数据类型。
有没有我可以遵循的替代设计模式?
解决方案
您有一个场景,其中您有一系列操作,这些操作可能会根据先前操作的结果发生,也可能不会发生。
我认为您选择了正确的模式,责任链将是一个不错的选择。
您只需要调整允许沿着潜在处理程序链传递请求的经典实现,直到其中一个处理请求。
基本上,您可以更改每个操作的实现,以便当其条件有效时,它执行自己的逻辑并为链中的下一个操作返回结果。
因此,无论何时操作失败,您都不应该抛出异常,因为异常必须用于异常情况(您的正常逻辑流程无法处理的任何情况);因此,在责任链中,期望某些操作可以返回信号以中断链(预期结果)。
考虑到这一点,我认为你不应该在这种情况下抛出异常。相反,您应该返回一个受控信号来停止链的流动。
问候,
推荐阅读
- php - jQuery load() 无法加载带有文本文件的 php 页面?
- flutter - 颤振 BlocProvider 导航
- ios - 我该如何解决致命错误:找不到模块'package_name'
- c# - SQL DataReader 到数组中
- python - 合并不同大小的数据框并绘制列的差异
- r - 重现使用 R 进行卡方检验的过程
- typescript - Vuelidate 打字
- c# - Linq:GroupBy 不显示 .Include 子句的结果
- r - 当我用 R 绘制相关图时,着色是如何工作的?
- r - tbl_uvregression 给出 Error: C stack usage is too close to the limit