如何处理替代业务流程

时间:2012-07-26 11:40:53

标签: performance architecture business-logic

我的应用程序有许多模块,原始业务流程如下所示:

  

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的输入调整为中间类型并写入适配器以转换A - >中介类型
  3. 所选择的解决方案必须符合以下目标:

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

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

2 个答案:

答案 0 :(得分:1)

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

假设:

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

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

优点:

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

要记住的事情:

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

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

我们为此推出了自己的状态机框架以满足我们的需求。您应该查看适用于您的平台的内容。

答案 1 :(得分:1)

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

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