mercredi 17 février 2010 13:46
JeremyJeanson
[WF4] Migration de WF3 : Rêve? Cauchemar? ou Réalité?
Que faire de ses projets WF3? Migrer de WF3 à 4? Est ce possible?
- Le rêve?
Oui! Contrairement à ce que laissent croire les divers informations qui circulent sur le web, la migration est possible. Microsoft a même mis disposition une documentation expliquant les éléments à prendre en compte dans ce cadre : WF 4 Migration Guidance. On y retrouve les documents suivants :
- WF Migration Best Practices.docx
- WF Migration Cookbook Custom Activities.docx
- WF Migration Cookbook Workflows.docx
- WF Migration Overview.docx
- WF4 Rules Guidance.docx
- WF4 State Machine Guidance.doc
- WF4 Workflow Services Guidance.docx
Alors pourquoi entendrait on que cette tâche est impossible?
- Le cauchemar?
Un petit tour du poster du Framework 4 s'impose pour comprendre (section WF uniquement).
Oui vous avez bien lu NEW et uniquement NEW. WF4 change tout Workflow Foundation. Certaines fonctionnalités de WF3 on même entièrement disparues (State Machine, Rules …).
Il y a de quoi décourager les plus braves. Voila pourquoi grand nombre de projets de WF3 ne migreront jamais vers WF4.
- La réalité
Personnellement, je ne pense pas qu'il soit judicieux de conserver le travail fait avec WF3. Avec WF4 le développement est tellement plus rapide que dans bien des cas l’investissement fait pour passer à WF4 serra moindre que celui qu’il faudrait consentir pour migrer.
Mes principales raisons sont les suivantes :
- L'exécution d'un Workflow ne nécessité plus de Runtime de Workflow (c’est la fin de cette classe de singleton que vous utilisiez d’un projet à un autre… et de beaucoup d’autre codes récurrents).
- Les méthodes utilisées pour établir la logique des WF3 (IF par exemple) n'ont plus de sens dans WF4 car on utilise des type Variable, Argument, Expressions Vb.
- Les services WF3 destinés à fournir les données externes aux Workflows n'ont plus d'intérêt. WF4 peut directement appeler une méthode externe et stocker le résultat dans une variable.
- Les services WCF/WF peuvent être écrits et configurés beaucoup plus aisément (il existe même de nouveaux services WCF en Xaml).
- Rehosting du designer extrêmement simple.
- L’utilisation intensive de WPF et de Xaml.
- Les performances lors de l’exécution.
- … etc …
- Mais surtout : le Designer est plus facile à appréhender (pensez à votre utilisateur final… sa formation serra plus rapide!)
WF4 c’est la Rolls du Workflow pour .net!
Mais… oui il ya toujours un MAIS. On vous demandera forcément à un moment de conserver votre WF3.
Il existera donc un souci si vous devez conserver votre WF3 sans avoir le temps suffisant pour migrer. Vos projet WF3 ne doivent pas cible le Framework 4. Pour tirer partie de ce Framework il faudra donc ruser.
Si WF3 ne peut pas utiliser WF4, il en est tout autre de WF4. En WF4 il existe une activité Interop qui permet d’appeler une activité de WF3 ou de charger un Workflow de WF3.
On peut donc envisager de garder ses projets WF3 tout en bâtissant ses nouveaux Workflows avec WF4. L’architecture pour une migration réussie pourrait donc consister en un découpage en trois projets :
- Votre application qui à besoin des Workflows.
- Un assembly WF3 contenant les anciens Workflows.
- Un assembly WF4 contenant les nouveaux Workflows.
Le projet WF4 étant bien entendu responsable de l’invocation des Workflows et activités de WF3.
Une solution référençant un projet WF3 comme ceci:
Deviendrait donc de la forme suivante (avec le WF4 qui référence le projet WF3 et qui prend donc sa place).
Votre travail de migration se limiterait donc à ne toucher qu’aux invocations effectuées dans votre application, pour les remplacer par celles de WF4. Par la suite vous pourriez même envisager de faire disparaitre le projet WF3 (à condition d’avoir le temps de tout réécrire en WF3).
J’ai testé cette approche il y a quelques mois sur un projet réel avec succès ;). Je peux donc dire que cela fonctionne et a été beaucoup moins gourmand en temps qu’une migration complète.
Mais certain d’entre vous ont peut être tenté une autre approche.
Si oui, quelle est elle? Quelles sont vos contraintes?
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :