2012-07-26 60 views
1

我的应用程序有许多模块和原有的业务流程是这样的:如何处理替代业务流程

甲 - >乙 - “ç - > d

随着应用的增长,备选流被添加以满足客户的需求:

A - >乙 - “ç - > d

A - >乙 - > C” - > d(C现在可以执行可选的操作)

A - > d

A - > d”(d现在能够执行C的可选操作)

的单元测试用例的数量和QC的手动测试火箭。

电流I有2个解决方案:

  1. 静默创建B,C从A给它d之前,那么我可以保证输入到d数
  2. 跳过B,C,调整输入d到一个中介类型和写入适配器转换的A - >介导型

所选择的解决方案必须低于目标满足:

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

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

回答

1

首先,我不完全确定我理解你的问题,所以让我说出我的假设,然后提供我的答案。必要时适应。

假设:

  • 你的业务流程模型操作的集合。例如:A可能是结账步骤,C和C'是两个不同但相似的付款步骤。
  • 每个过程步骤在公用数据集的不同部分上运行。例如:B计算总计和折扣(对购物车内容进行操作),C和C'获取总计并启动某种付款。
  • 您希望尽可能保持原有实现的完整性。

如果是这种情况,我会确保我对我的数据模型有正确的理解,并且每个步骤的哪些部分可以运行,然后围绕此建立一个状态机。

优点:

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

事情要记住:

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

我已经成功地在先前的项目中使用了这种建模业务流程的方法。这是最终用户可以购买物品的流程。我们需要处理大量替代流程,例如在不同的支付方式之间切换,在后端系统不可用时重试等等。

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

1

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

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

+0

感谢您的建议,但我正在使用的应用程序已经5年了,因此我无法选择新技术。 – 2012-07-30 04:04:02

+0

您通常可以将抽象放在系统中的任何边界上。我们最近已经将Windows Workflow与一个应用程序集成在一起,这个应用程序有15年的COM和9年的.NET。 – pointyhat 2012-08-09 16:07:32