I contacted the maintainer of the project and have contributed a large portion of functionality that makes it easy to define workflows that include people. Here is a sample workflow:
var open = Declare.Step(); var wf = new StatefulWorkflow<SiteVisit>("Site Visit Workflow") .Do(x => x.GatherInformation()) .Define(defineAs: open) .Yield(SiteVisit.States.Open) .Unless(x => x.Validate(), otherwise: open) .Do(x => x.PostVisit()); // And send an object through var visit = new SiteVisit(); wf.Start(visit); // It stops at the Yield, maybe persist it in a database and display a page to the user wf.Start(visit); // extension methods to check if it's still in the workflow if (visit.IsAliveInWorkflow("Site Visit Workflow")) wf.Start(visit);
This workflow is fairly simple and demonstrates how you can create a module for defining workflow and isolate all business logic in data objects (models and view-models work great here). I was initially concerned with the idea of creating conditional goto constructs, but after more thought I decided that this shouldn't be a significant problem as long as workflows stay simple and there is a clear separation from business logic and workflow logic.
There is a lot more to this project - and to the features I contributed. However, I haven't even put forth a good effort in developing the official documentation, so perhaps I'll write about this more after developing the core documentation a little more. I think this is an excellent solution for companies who want to quickly through together workflows without a significant barrier to understanding. I think I will continue developing on ObjectFlow as long as I have something I feel I can add.