Прежде всего, мне кажется, что использование WF добавляет дополнительные сложности к тому, что должно быть довольно простым процессом. Хотя WF можно использовать для моделирования потока выполнения, его цель - моделировать бизнес-поток и включать бизнес-правила и логику, не вводя их в свои реализации.
В вашем примере бизнес-правила в значительной степени похожи на вещи, которые должны обрабатываться файлом app.config.
Однако по более широкому вопросу использования одного рабочего процесса или нескольких. Вы хотите, чтобы каждая из ваших задач рабочего процесса была примерно одинаковой «широкой области действия»
Например
WF для построения стола
- покупка древесины
- резаная древесина
- резаная древесина для ног
- кромки скоса
- круглые карнизы
- песок дважды с разной крупностью
- сборочный стол
Все шаги в середине гораздо более детальные, чем шаги вокруг них.
Таким образом, вы могли бы рассмотреть разделение его на два отдельных рабочих процесса: рабочий процесс высокого уровня, который содержит широкие шаги, и рабочие процессы нижнего уровня, которые содержат подробности.
Таким образом, шагу рабочего процесса GetDatasource не будет важно (внешне), из какого типа источника данных он собирается, он просто возвращает к следующему шагу в рабочем процессе набор данных.
То же самое относится и к цели, ее не волнует, какой тип источника данных у него есть, она заботится только о том, как она связана с данными. Так что это также должно быть заключено в капсулу.
Таким образом, ваш рабочий процесс может быть тремя рабочими процессами
Максимальный WF
- GetDataSourceWF
- DoThingsWithDataWF
Тогда ваши рабочие процессы DoThingsWithDataWF и GetDataSourceWF могут быть связаны только с тем контекстом выполнения, который им необходим.
EDIT
Как указал комментатор Джеймс Шек.
Вы можете использовать рабочий процесс более высокого уровня, чтобы фактически запустить ваши рабочие процессы более низкого уровня и управлять их выполнением друг с другом.