proophsoftware/done-process

工作流处理工具

dev-master 2015-11-19 17:27 UTC

This package is auto-updated.

Last update: 2024-09-17 01:58:38 UTC


README

简化工作流处理 - 由 prooph software GmbH 驱动

中间件拯救

一个 DONE! 故事被分为章节。每个章节代表完成故事所需的过程。这个过程可能由多个步骤组成,这些步骤相互依赖。以数据库导入为例。

想象一下,前一个章节已经从外部系统收集了用户信息,并将数据放入 CSV 文件中。下一个章节的任务是从 CSV 文件(理想情况下逐行)加载数据,并将数据导入空表中。

哦,等等!如果表不为空怎么办? 很好的发现!我们想进行完全同步,但又不希望数据库停机。所以我们需要首先将新数据导入临时表中。如果这个操作成功,我们可以删除旧的用户表,并将临时表重命名为新的用户表。

正如你所见,一个简单的故事可以变得相当复杂。在另一个故事中,我们可能想要做一些相同的步骤,但其他步骤则不这样做。这就是中间件发挥作用的时候。

我们不是编写一个包含所有上述步骤的单个脚本,而是将过程分解为步骤,并将这些步骤作为中间件实现。我们的例子最终会变成这个中间件

  • CreateEmptyTableMiddleware
  • LoadDataFromCsvFileMiddleware
  • ImportDataIntoTableMiddleware
  • ExchangeTableMiddleware

中间件配置

到目前为止一切顺利,但中间件如何知道创建哪个表、加载哪个文件等等呢?

答案是

  1. 通过从 DONE! 后端发送的章节命令中提取的信息,该命令用于启动章节。
  2. 以及将要处理的数据的类型描述。

章节命令

章节命令必须是 Prooph\Common\Messaging\Message。它由 DONE! 后端设置并发送,通常包括有关章节(配置)的信息。

原型和数据类型

章节命令应该提供的重要信息是处理哪些数据。为了使中间件更容易识别数据的类型,并可能获得有关属性或集合项类型的更多信息,这个包提供代表不同 value types 的特殊值对象。类型对象被设计用来包围它们的原生对应物,并且是可扩展的。例如,你可以创建一个扩展 AbstractDictionary 的用户类型。一个用户类型可能看起来像我们在测试套件中使用的 UserDictionary

此外,这个包还提供了一个 Prototype 类。原型描述了一个值类型,而不引用实际的值。

更多信息即将到来。敬请期待!

您的 prooph software 团队