Est-il préférable d’avoir un seul gros stream de travail ou plusieurs plus petits?

Je dois créer une application qui récupère les fichiers d’un serveur et les transfère sur un autre serveur. Il a été suggéré que j’examine l’utilisation de Windows Workflow Foundation (WF).

J’ai commencé à élaborer le stream de travail, mais cela devient compliqué et je ne suis pas sûr de le faire de la meilleure façon possible.

Voici les activités de base du workflow:

Obtenir une liste des sources Déterminer si la source est ftp ou un lecteur de disque Obtenir une liste des fichiers du serveur Si source est ftp, récupérez le fichier avec ftp serveur sinon si cible est lecteur puis écriture sur un autre lecteur si cible est service Web puis publication sur service Web Si source est ftp, suppression du fichier à l’aide de commandes ftp

Avec un stream de travail, cela devient un peu occupé. J’ai besoin de 2 boucles while, une autour des intégrations et une après avoir une liste de fichiers.

L’autre chose à laquelle je pensais était de créer plusieurs stream de travail. Un pour FTPtoFTP, FTPtoDrive, FTPtoWebServie, DriveToFTP, DrivetoDrive, DriveToWebService.

Aucune suggestion?

Tout d’abord, vous devriez envisager de créer des activités personnalisées pour chacune des sections principales. Les activités personnalisées seront des activités composites pouvant être composées de nombreuses étapes. Cela vous aidera à désencombrer un peu les choses et vous permettra de continuer à travailler avec les stream de travail à un niveau relativement élevé.

Bien que pratique, le concepteur de stream de travail n’est pas vraiment conçu pour une très grande échelle. À partir de VS 2008, le meilleur moyen de travailler avec les technologies basées sur XAML consiste à utiliser l’éditeur de texte et à lire / écrire le code XML directement.

Le diviser en plusieurs stream de travail peut ne pas être la meilleure approche, sauf si vous pouvez le diviser en quelques activités de haut niveau et que vous travaillez au niveau XAML. Gardez à l’esprit que si la logique et le stream sont presque identiques pour tous ces éléments, vous devrez maintenant gérer 6 stream de travail différents. C’est un plus grand cauchemar si vos workflows sont complexes et que vous devez corriger une erreur de logique commune à tous.

Vous devriez également envisager l’utilisation des services. Cela peut vous permettre d’avoir UN SEUL stream de travail et UN SEUL ensemble d’activités, mais la mise en œuvre de chaque étape peut être isolée dans un service. Dans ce cas, vous devez instancier un stream de travail par combinaison, charger le même stream de travail dans chacun et injecter différentes activités. Pas nécessairement la meilleure approche, mais quelque chose à considérer.

Tout d’abord, il me semble que l’utilisation de WF ajoute des complications supplémentaires à ce qui devrait être un processus assez simple. Bien que WF puisse être utilisé pour modéliser un stream d’exécution, son objective est de modéliser un stream métier et d’inclure des règles et une logique métier sans les intégrer à vos implémentations.

Dans votre exemple, les règles métier semblent en grande partie comme des choses qui devraient être traitées dans un fichier app.config.

Cependant, sur la question plus large de l’utilisation d’un seul stream de travail. Vous voulez que chacune de vos tâches de stream de travail ait approximativement la même “scope”

Par exemple WF pour construire une table

  • acheter du bois
  • couper du bois
  • bois coupé pour les jambes
  • bords biseautés
  • corniches rondes
  • poncer deux fois avec une grosseur différente
  • assembler la table

Les étapes au milieu sont toutes beaucoup plus détaillées que celles qui les entourent. Par conséquent, vous pouvez envisager de le scinder en deux stream de travail distincts: un stream de travail de haut niveau contenant les étapes générales et des stream de travail de niveau inférieur contenant les détails.

Ainsi, l’étape de stream de travaux ‘GetDatasource’ ne prendrait pas en compte (en externe) le type de source de données qu’elle collecte, elle retourne simplement à la prochaine étape du stream de travaux un dataset.

Il en va de même pour la cible, peu importe le type de source de données dont il dispose, mais uniquement le rôle que cela a à jouer avec les données. Donc, cela devrait également être encapsulé.

Donc, votre stream de travail pourrait être trois stream de travail

Plus haut WF

  1. GetDataSourceWF
  2. DoThingsWithDataWF

Ensuite, vos workflows DoThingsWithDataWF et GetDataSourceWF peuvent être concernés uniquement par le contexte d’exécution dont ils ont besoin.

MODIFIER

Comme l’a souligné le commentateur James Schek. Vous pouvez utiliser le stream de travail de niveau supérieur pour lancer vos stream de travail de niveau inférieur et gérer leur exécution les uns dans les autres.

Personnellement, je n’ai pas encore utilisé le WWF. J’ai cependant pas mal de workflows auparavant. Pour moi, les diviser en stream de travail plus petits me semble être la meilleure solution. Lorsque vous travaillez avec des stream de travail, vous devez essayer de limiter chaque stream de travail à une tâche spécifique afin de disposer d’une action de démarrage définitive, d’au moins un itinéraire réussi et d’au moins un itinéraire en échec. Les stream de travail en général peuvent être très délicats et il est préférable de les garder aussi simples que possible.

En règle générale, chaque fois que les choses se gâtent, vous devez les décomposer en parties plus petites. Je recommanderais certainement de le décomposer en plusieurs stream de travail.