1

我的应用有很多模块,原来的业务流程是这样的:

A -> B -> C -> D

随着应用程序的增长,将添加替代流程以满足客户的需求:

A -> B -> C -> D

A -> B -> C' -> D(C 现在可以执行可选操作)

A -> D

A -> D' (D 现在可以执行 C 的可选操作)

单元测试用例的数量和 QC 的手动测试数量猛增。

目前我有2个解决方案:

  1. 在给D之前从A默默创建B,C,然后我可以保证D的输入数量
  2. 跳过B、C,调整D的输入为中介类型,写Adapter转换A->中介类型

选择的解决方案必须满足以下目标:

  • 灵活业务(针对客户)
  • 高处理性能
  • 维护(源代码)

我不知道我应该使用哪一个或有更好的解决方案。

4

2 回答 2

1

首先,我不完全确定我理解你的问题,所以让我陈述我的假设,然后提供我的答案。根据需要进行调整。

假设:

  • 您的业​​务流程模型操作集。示例:A 可以是结帐步骤,C 和 C' 是两个不同但相似的付款步骤。
  • 每个处理步骤都对公共数据集的不同部分进行操作。示例:B 计算总计和折扣(对购物车内容进行操作),C 和 C' 计算总计并发起某种付款。
  • 您希望尽可能地保持现有实现的完整。

如果是这种情况,我会确保我对我的数据模型有正确的理解,以及每个步骤将在哪些部分上运行,然后围绕它构建一个状态机。

好处:

  • 您的每个流程步骤都可以使用一种或多种状态进行建模。您确保转换基于数据模型。您可以有一个决策状态,该状态基于用户使用 Paypal 付款或兑换代金券的决定,将您转换到适当的状态来处理此问题。
  • 状态可以单独测试。单元测试将很容易编写,并且您可以为面向客户的功能构建工具以进行手动测试(例如与支付提供商的集成测试)。
  • 状态机通常占用空间小。它们通常是事件驱动的,因此在您的应用程序中保持线程计数。如果状态只包含逻辑并且只对数据对象进行操作,您甚至可以跨不同的并发进程重用状态实例。这取决于您的状态机框架。

要记住的事情:

  • 在您的状态中明确,并让许多小状态执行小型专用操作。如果决定使用卡支付或代金券,则将其建模为伪状态。
  • 避免上帝对象(即包含无所不知的对象)。如果状态开始在域模型的大部分上运行,请考虑改进模型或状态机
  • 确保使所有内容都是事件驱动的和异步的。同步状态机无法扩展。如果您正在调用非异步服务,请为其构建一个包装器。

我在之前的项目中成功地采用了这种方式对业务流程进行建模。这是最终用户可以购买对象的流程。我们需要处理许多替代流程,例如在不同支付方式之间切换、在后端系统不可用时重试等等。

为此,我们推出了自己的状态机框架以满足我们的需求。你可能应该看看你的平台有什么可用的。

于 2012-07-27T19:57:41.647 回答
1

听起来您需要一个工作流系统。您可以构建各个组件并独立测试它们,然后使用工作流系统在每个客户的配置中将它们连接在一起。

Windows Workflow 和任何 Java BPM 软件都适合该任务。

于 2012-07-27T20:02:01.580 回答