Welcome to Windows Workflow Foundation (WF)
Top Tasks :

WF Community Bloggers

Browse by Tags

All Tags » .NET;Architecture;WinFX;Workflow   (RSS)
Sorry, but there are no more tags available to filter with.

  • Workflow Complexity, Part 2

    Jon Flanders weights in on the complexity of Windows Workflow Foundation, saying he disagrees with some of the points raised by Brian and Scott . I think he exaggerates a little bit when he says we think it is too complex, I just said it was complex :-). While Jon raises many good points, I don't quite buy his argument. Seems to me he's saying WF is simple bacause, well, it behaves as it was supposed to behave based on the design the WF team chose for the product. Jon does raise the very good point that, as any other technology, you have to understand it in order to use it effectively, which is something I do agree with (see? we do agree on something! ;-)). However, I'll like to explain my comments on WF complexity a little more (though I know it's something Jon and I disagree on ). I expected WF to be a complex technology, because the underlying problem domain is complex. And for what it's worth, complexity is not bad, and I personally happen to like a lot about WF.However, I don't think that going for this complexity is warranted in everycase, which seems like it is what MS is advocating when they raised the "Workflow is Everywhere" mantra. For example, I happen to think that going for the complexity of WF for your website navigation (PageFlows) is unwarranted in most cases, unless you have some seriously complex scenarios to tailor to. There will definitely be a need for good architectural guidelines as to when going with WF is really a good investment. But besides that, my main concern with WF is that it is deceptively simple . Windows Workflow Foundation, for better or worse, is an extremely leaky abstraction, and it shows in several places. In particular, the WF programming model makes it seems as if programming WF was actually simpler than it really is, and manages to hide some crucial aspects of the WF behavioral model so that you might not be aware of them until it is too late and you're about to hit a brick wall at a 100MPH. But let's bring some clear examples of this: Spawned Contexts Scott and Jon brought the Spawned Contexts concept to the table, with Jon saying that they are a very important part of the model. I agree, they are. They are also a direct consequence of the WF design around workflow definitions being prototype instances of the workflow at runtime, and the persitency requirements of workflow. Spawned Contexts are not a problem per se, and they are actually a pretty clever solution to the problems they solve. The real problem is that nothing in the WF programming model forces you to be aware of Spawned Contexts.It is incredibly easy to write code (both in a simple workflow as well as in custom activities) that will appear to work fine at first but that later completely breaks down when spawned contexts are introduced into the mix. The other part of the equation is that it's also not very clear from just looking at a workflow definition what will introduce spawned contexts into the workflow. Sure, perhaps you spot a ReplicationActivity Read More...
  • Workflow Complexity

    Brian Noyes postes here about the complexities in developing for Windows Workflow Foundation. In general, I have to agree with his sentiment. Workflow in general is not trivial and requires approaching it with a somewhat different mindset, and it's no different with Workflow Foundation. Some of what Bryan talks about is caused in part by this conceptual model differences, and partly just because of the way WF works. But, up to a point, most of what he mentions is just the superficial issues. Things get far more complex once you start diving deeper into it, and there are quite a few issues that will bite you if you're not aware of the WF model. Some examples: The execution model is not exactly trivial (though it is extremely powerful). It has several points that are not very intuitive and the overal design-time experience might make you feel it should work different than what it actually does. For example: WF workflows (or rather activities) basically operate as prototype definitions at runtime. This can cause issues when manipulating properties, so you need to be careful to ensure you are manipulating the executing instance and not the prototype instance. The WF execution model and thus the behavior of running workflows can be substantially affected by what services are configured in the WF runtime. This can be quite surprising in some scenarios and can easily break your workflow definitions. The threading model in WF is far more complex than your regular .NET code (which is expected), but since there are multiple alternative scheduling services, they can also affect how your workflow definitions get executed with sometimes surprising results. The extensibility model in WF is pretty amazing, and how the runtime is completely supported by a set of configurable and extensible services is one of the really strong points in WF. However, it also adds a lot to the complexity because what you tested and worked under one configuration might very well not work under another and it also means you need to be aware of the type of workflow you're building and the activities you're using and what services they require. Even with the Activity Binding facilities in WF (which are really cool), no-code (or little-code) workflows are still hard, and people will tend to escape this by using a lot of CodeActivities and event handlers to hook things together through code. This has both advantages and disadvantages. Creating new activities is easy. Creating good activities can be pretty hard. None of this retracts overall from the WF platform; it's still a pretty important part of the .NET FX 3 platform; it just means you need to be well informed about what you're getting into if you decide to take advantage of it. At the end, it ain't no silver bullet. Read More...

<July 2008>
SuMoTuWeThFrSa
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

Copyright © 2006 Microsoft Corporation. All Rights Reserved. | Terms of Use | Privacy Statement | Contact Us