第三方DataFlow库对我的应用程序非常有用。我有大约10个街区,我想数量会增加。
当我准备我的应用程序的原型时,我感到困惑,因为我知道我得到了功能设计。
void BIG_WORKFLOW_METHOD()
{
...
var block1 = new TransformBlock<string, string>(...);
var block2 = new TransformBlock<string, string>(...);
var block3 = new TransformManyBlock<string, string>(...);
var broadCastBlock = new BroadcastBlock<EventObject>(ev => ev);
...
var block9 = new ActionBlock<string>(...);
var block10 = new ActionBlock<EventObject>(...);
block1.LinkTo(block2);
block2.LinkTo(block3);
block3.LinkTo(block4);
broadCastBlock.LinkTo(block5);
broadCastBlock.LinkTo(block6);
...
}我需要将我的大工作流方法转换为OOP设计。我希望将来能够轻松地在我的工作流程中添加或删除步骤。也许有人能解决这项任务?
我认为工作流最合适的架构是状态设计模式,但是我认为第三方DataFlow已经使用了这个模式,这将是过度的架构。
发布于 2017-01-31 10:58:10
所有关于设计的问题都是非常广泛的,很难用一个“银弹”解决方案来回答。如果检查DataflowBlock extension class,我们会看到许多面向函数的重载,特别是处理彼此之间的链接块的重载。
所以,你能做的最好的事情就是在你的应用程序中为不同类型的流引入一些工厂和/或生成器。这样的类可以很容易地为您的流构建一个简单的模型,而不需要一些低级的lambda。以下是实现目标的一些想法:
正如您已经知道的,块之间可以很容易地链接在一起,因此为流添加步骤非常容易。您还可以使用predicate链接这些块,这样消息将直接到达您创建的特定块。
解除这些块的链接是一项更复杂的任务。如果你不再需要它,最简单的方法就是使用save the reference to the IDisposable link and dispose it。
另一种选择是link the blocks with new DataflowLinkOptions { MaxMessages = N },但您需要知道通过给定链接传递的消息的确切数量。
此外,还有一个简洁的选项作为Encapsulate方法,用于包装两个块之间的链接。
所以,就你所见,有很多机会可以在你的应用程序中创建一些流,但你必须自己定义规则。TPL数据流是一种开发工具,而不是体系结构模式。
https://stackoverflow.com/questions/41946288
复制相似问题