In my scenario, let’s say there is a ASP.Net 4.0 C# page containing a form with several inputs on it. Based upon which state the user is in, the form needs to act in entirely different ways: some fields might be required, some not visible at all, some might have different requirements (state A might only allow numbers 1-5, state B numbers 5-10), etc.
So, to simplify things, let’s just say for any given input on the form, I need to determine whether or not it’s required for the user, again based on their state. For those of you who run into this scenario quite a bit, what’s the best way of implementing a system to handle this? I can see the following options:
Hardcoded – Difficult to maintain, obviously
Custom Database Rule Framework – This seems like it would work; however, it would be somewhat of a pain to maintain depending on how complicated the logic is
Windows Workflow Foundation – This would be able to handle just about any kind of logic, and be decent to maintain, but I’m not sure how this would do performance wise. (could be stored externally in database)
Dynamic Code – Store the logic in a database and run it directly based upon the user. I’ve never done this.. is it possible?
That’s all I’ve come up with at this point, but I’m hoping someone out there has found an elegant solution to handle scenarios with complicated forms like this.
Thanks!
I have never worked with WWF, but I have encountered a scenario like this and implemented an entry form for it that works well and is easy to maintain once you understand the system.
I will discourage you from using hardcoded logic because any degree of complexity will quickly become impossible to maintain. I tried a hybrid approach that included some hardcoding initially and it did not turn out well.
I ended up creating, as you call it, a custom database rule framework. It is a little extra work to set up config forms to associate user groups with certain codes and pieces of functionality, but in the end it is well worth it for everything to automatically configure itself. Also in my case I was able to farm out user & code setup work to a supervisor in the department that uses the application, so that is a big plus.