2

TPL DataFlow-Bibliothek sehr nützlich für meine Anwendung. Ich habe ungefähr 10 Blöcke und ich denke, eine Zählung wird zunehmen.TPL DataFlow und Architektur Design

Als ich Prototyp meiner Anwendung vorbereitete, war ich verwirrt, weil ich verstand, dass ich Funktionsdesign bekam.

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); 
    ... 
} 

Ich muss meine Big-Workflow-Methode in OOP-Design umwandeln. Ich möchte in Zukunft einfach Schritte aus meinem Workflow hinzufügen oder entfernen können. Kann jemand diese Aufgabe lösen?

Ich denke, die am besten geeignete Architektur für Workflow ist State Design Pattern, aber ich denke, TPL DataFlow verwenden bereits dieses Muster und das wird über Architekt sein.

Antwort

1

Alle Fragen zum Design sind sehr weit gefasst und schwer mit nur einer "Silver Bullet" Lösung zu beantworten. Wenn man die DataflowBlock extension class untersucht, werden wir viele funktonal-orientierte Überlastungen sehen, vor allem die, die sich mit den Verbindungsblöcken zwischen einander befassen.

Also, das Beste, was Sie tun können, ist einige Factory und/oder Builder für verschiedene Arten von Flows in Ihrer Anwendung einzuführen. Solche Klassen können leicht ein einfaches Modell für Ihren Fluss ohne einige Low-Level-Lambdas erstellen. Hier sind einige Gedanken zum Erreichen Ihres Ziels:

Wie Sie bereits wissen, können Blöcke leicht miteinander verknüpft werden, so dass das Hinzufügen von Schritten für Ihren Fluss sehr einfach ist. Sie können die Blöcke auch mit Prädikat verknüpfen, so dass Nachrichten direkt an bestimmte Blöcke gesendet werden, die Sie erstellt haben.
Verknüpfung der Blöcke ist komplizierter Aufgabe. Der einfachste Weg ist save the reference to the IDisposable link and dispose it, wenn Sie es nicht mehr brauchen.
Andere Option ist link the blocks with new DataflowLinkOptions { MaxMessages = N }, aber Sie müssen die genaue Anzahl der Nachrichten wissen, die mit einem bestimmten Link geliefert werden.
Auch gibt es eine saubere Option als Encapsulate Methode zum Umwickeln der Verbindung zwischen zwei Blöcken.

So weit wie Sie sehen können, gibt es eine Menge Möglichkeiten, um einige Strömung in Ihrer App zu erstellen, aber Sie müssen die Regeln selbst definieren. TPL Dataflow ist ein Entwicklungswerkzeug, nicht das Architekturmuster.

Verwandte Themen