-
Notifications
You must be signed in to change notification settings - Fork 1
WhyYetAnotherWorkflowSystem
A friend asked me why this project needed to exist. He asked, why create yet another workflow system since there are dozens out there already. It’s a very valid question, because this project doesn’t have any novel concepts. The only difference is in the API and the user set the framework is targeted towards.
From what I saw of other frameworks, I felt like many of them attempted to split the definition of the workflow away from the software developer’s role. They seemed to be targeted towards providing non-programmers with UI to graphically outline the structure of the workflow. Then, the workflow would be handed over to a software developer to implement the methods that would execute on each event/state.
However, in my particular area, the same person was going to be defining the global workflow as was going to be implementing the behavior that gets executed by the workflow. As a result I felt that expressing the behavior and the workflow in two different languages was not an advantage. However, in ittyFlow, a “workflow” is a simple data structure, events are ordinary methods, and wait states are simple enumerations. Since everything is defined in Java, the compiler will catch some classes of problems through its normal static analysis. In other environments where the workflow is defined outside of Java, the compiler won’t have any insight into what data is needed for an event, what the types are, etc.
Developers should be fairly comfortable with defining the various entities since there’s nothing unfamiliar or special with these concepts. As a result, the implementation of execution is fairly small and, hopefully, transparent.
In short, I think workflows are a good idea, and people other then myself have thought of good ways to model them. In fact, the model is very simple and elegant. Since at this point, it’s not a hard problem, there’s no reason why we need a complex solution.
ittyFlow is an attempt to make it as simple and clear for java programmers to define workflows as possible.