首页 > 解决方案 > 多个 DAC 和 SAC 调用的设计模式

问题描述

场景- 请求验证后,我需要

  1. 调用数据库并更新记录。基于执行此数据库调用和请求数据的特定条件,我将调用Service1

  2. 执行此步骤后,我将调用另一个数据库并从请求中更新记录。

  3. 最后我会调用审计服务来保存交易细节。

这可以在正常的代码结构中实现。但我非常有信心在第 1 步或第 2 步之后会有即插即用,即,在第 1 步/第 2 步(待定)之后的下一个版本中将引入数据库/服务调用。

我决定选择责任链

问题

  1. 无论何时生成操作中断/异常,代码都应停止执行。
  2. 在单个 Logging 对象下,我很难处理顺序调用。
  3. 对于第 1 步的条件服务调用,操作链的动态修改有点复杂,因为我必须依赖从 AbstractionHandler 返回的单一数据类型。

有没有我可以遵循的替代设计模式?

标签: c#design-patterns

解决方案


您有一个场景,其中您有一系列操作,这些操作可能会根据先前操作的结果发生,也可能不会发生。

我认为您选择了正确的模式,责任链将是一个不错的选择。

您只需要调整允许沿着潜在处理程序链传递请求的经典实现,直到其中一个处理请求。

基本上,您可以更改每个操作的实现,以便当其条件有效时,它执行自己的逻辑并为链中的下一个操作返回结果。

因此,无论何时操作失败,您都不应该抛出异常,因为异常必须用于异常情况(您的正常逻辑流程无法处理的任何情况);因此,在责任链中,期望某些操作可以返回信号以中断链(预期结果)。

考虑到这一点,我认为你不应该在这种情况下抛出异常。相反,您应该返回一个受控信号来停止链的流动。

问候,


推荐阅读