Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 第三方物流数据流与体系结构设计_Oop_Design Patterns_Architecture_Task Parallel Library_Tpl Dataflow - Fatal编程技术网

Oop 第三方物流数据流与体系结构设计

Oop 第三方物流数据流与体系结构设计,oop,design-patterns,architecture,task-parallel-library,tpl-dataflow,Oop,Design Patterns,Architecture,Task Parallel Library,Tpl Dataflow,TPL数据流库对我的应用程序非常有用。我有大约10个街区,我想数量会增加 当我准备应用程序的原型时,我感到困惑,因为我知道我得到了功能设计 void BIG_WORKFLOW_METHOD() { ... var block1 = new TransformBlock<string, string>(...); var block2 = new TransformBlock<string, string>(...); var block3

TPL数据流库对我的应用程序非常有用。我有大约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);
    ...
}
void BIG\u工作流\u方法()
{
...
var block1=新的转换块(…);
var block2=新的转换块(…);
var block3=新的TransformManyBlock(…);
var广播块=新广播块(ev=>ev);
...
var block9=新动作块(…);
var block10=新动作块(…);
区块1.链接到(区块2);
区块2.链接到(区块3);
区块3.链接到(区块4);
广播块链接到(块5);
广播块链接到(块6);
...
}
我需要将我的大工作流方法转换为OOP设计。我希望能够在将来轻松地从我的工作流中添加或删除步骤。有人能解决这个问题吗


我想最适合工作流的架构是状态设计模式,但我认为TPL数据流已经使用了这种模式,这将超越架构师

所有关于设计的问题都非常广泛,很难用一个“银弹”解决方案来回答。如果我们检查一下,我们将看到许多面向函数的重载,特别是处理彼此之间链接块的重载

所以,最好的办法是为应用程序中不同类型的流引入一些工厂和/或构建器。这样的类可以很容易地为您的流构建一个简单的模型,而不需要一些低级的lambda。以下是实现目标的一些想法:

正如您已经知道的,块可以很容易地相互链接,因此为流添加步骤非常容易。您还可以使用谓词链接块,以便消息将直接转到您创建的特定块。
解除块的链接是一项更复杂的任务。最简单的方法是在你不再需要它的时候使用它。
另一种选择是发送,但您需要知道通过给定链接发送的邮件的确切数量。
此外,还有一个简洁的选项作为包装两个块之间链接的方法

因此,就你所见,有很多机会在你的应用程序中创建一些流,但是你必须自己定义规则。TPL数据流是一种开发工具,而不是体系结构模式