代码之家  ›  专栏  ›  技术社区  ›  Mike Roosa

一个大的工作流还是几个小的特定工作流更好?

  •  4
  • Mike Roosa  · 技术社区  · 16 年前

    我需要建立一个应用程序,从服务器获取文件并移动到另一个服务器。建议使用Windows工作流基金会(WF)进行研究。

    我开始建立工作流程,但它越来越混乱,我不确定我是否做了最好的方式可能。

    以下是基本的工作流活动:

    获取源列表 确定源是ftp还是磁盘驱动器 从服务器获取文件列表 如果源是ftp,则使用ftp获取文件get else如果源是驱动器,则从驱动器读取文件 如果目标是ftp,则ftp文件到服务器else如果目标是驱动器,则写入驱动器else如果目标是web服务,则发送到web服务 如果源是ftp,则使用ftp命令删除文件;如果源是drive,则删除文件

    一个工作流程就有点忙。我需要两个while循环,一个是关于集成的,一个是在我得到一个文件列表之后。

    我想到的另一件事是构建多个工作流。一个用于ftptoftp、ftptodrive、ftptowebservice、drivetoftp、drivetodrive、drivetowebservice。

    有什么建议吗?

    4 回复  |  直到 16 年前
        1
  •  3
  •   James Schek    16 年前

    首先,您应该考虑为每个主要部分创建自定义活动。自定义活动将是可以由多个步骤组成的复合活动。这将有助于消除一些混乱,并允许您在相对较高的级别上继续使用工作流。

    工作流设计器虽然很方便,但并不是真的设计成非常大的规模。从vs 2008开始,使用基于xaml的技术的最佳方法是使用文本编辑器并直接读/写xml。

    将其分解为几个工作流 可以 不是最好的方法,除非您可以将其分解为几个高级活动并在xaml级别上工作。请记住,如果所有这些操作的逻辑和流程几乎相同,那么您现在必须维护6个不同的工作流。这是一个 更大的 如果您的工作流很复杂,并且需要修复所有工作流中的常见逻辑错误,那将是一场噩梦。

    您还应该考虑使用这些服务。这可能允许您拥有一个工作流和一组活动,但是每个步骤的实现可以隔离到一个服务中。在这种情况下,您需要为每个组合实例化一个工作流,将相同的工作流加载到每个组合中,并注入不同的活动。不一定是最好的方法,而是要考虑的事情。

        2
  •  3
  •   DevinB    16 年前

    首先,在我看来,使用wf会给一个相当简单的过程增加额外的复杂性。尽管wf可以用于对执行流建模,但它的目的是对业务流建模,并包括业务规则和逻辑,而不必将它们放入您的实现中。

    在您的示例中,业务规则看起来很大程度上类似于应该由app.config文件处理的事情。

    然而,在使用一个或多个工作流的更广泛问题上。您希望每个工作流任务大致相同的“广域”

    例如 WF用于构建表

    • 购买木材
    • 砍伐木材
    • 砍柴做腿
    • 倒角边
    • 圆形飞檐
    • 粗砂二次
    • 装配台

    中间的台阶都比周围的台阶要详细得多。 因此,您可以考虑将其分为两个独立的工作流:包含广泛步骤的高级工作流和包含详细信息的低级工作流。

    因此“getdatasource”工作流步骤不关心(外部)它从哪种类型的数据源收集数据,它只返回工作流中的下一步一组数据。

    对于target也是一样,它不关心它拥有什么类型的数据源,只关心它与数据有什么关系。所以这也应该被封装。

    所以你的工作流程可以是三个

    最高WF

    1. 获取数据源wf
    2. 数据WF中的dothingswithdatawf

    然后,dothingswithdatawf和getdatasourcewf工作流都只关心它们需要的执行上下文。

    编辑

    正如评论者詹姆斯·舍克所指出的。 您可以使用较高级别的工作流来实际启动较低级别的工作流,并将它们彼此管理执行。

        3
  •  0
  •   Alexander Kahoun    16 年前

    我个人还没用过世界自然基金会。不过,我以前做过不少工作流程。对我来说,将它们分解成更小的工作流似乎是最好的方法。当您使用工作流时,应尝试将每个工作流限制为特定任务,以便您具有确定的开始操作和至少一个成功路由和至少一个失败路由。一般来说,工作流是非常棘手的事情,最好保持每个工作流尽可能简单。

        4
  •  0
  •   hmcclungiii    16 年前

    一般来说,当事情变得“一团糟”时,你应该把它们分解成更小的部分。我绝对建议把它分解成几个工作流。