William,

I use a session scoped CFC, an "AdminManager" with a getter and setter to track the return url in a particular app we've built, but in this case, the starting point is clearly defined. It'll only bring them back to the starting point when in their editing process they wander around in the back end.

setReturnUrl()
getReturnUrl()

I find that to be enough, but this seems to much more simple than what you're aiming for.

Lemme take a different perspective for a moment. Taking into account your proposed requirement that the app should be able to handle interruptions, what would your solution look like to the user? Would they have a button or a link that says/implies something to the effect "Take me back where i was and restore the application process to the state it was in when i got interrupted"? Would you put that "Take Me Back" button everywhere (because how would you know in advance from which view in the application a user would want to go back to where they left off)? How would the application "know" what an interruption was? Or when it occurred?

Or would you want to present the user a series of Undo type history links that would each restore the application to the state it was in up to say 15, 20, or 30 clicks ago, depending on how many undo steps you preserve state for, and let the user decide where they were interrupted? How would you log and then display those steps to the user so they would make any sense to them?

How does a program like Excel, for instance, handle an interruption when the user doesn't "take responsibility for it" ? A simplistic example: Let's say i'm in the middle of entering a complex formula and get a phone call asking me to take a look at another worksheet in the same Excel file. Would most users expect the program to be able to return them to the midst of entering that formula? Or would they expect that they would either need to complete their process before going to another worksheet, or choose to abandon it?

As a user, i know that if i interrupt a process in the midst of completing something, i can't always expect the computer to be smart enough to cover for me. In fact, i expect the opposite.

As an interface designer, i know that any solution i come up with for this edge case of "getting interrupted by a phone call" is likely to be more daunting or error prone then simply letting the user start again. I also know that i shouldn't be designing the app to be highly usable around edge cases. I should concentrate my usability efforts on the stuff users commonly need to do.

That's not to say you can't save state at specific points mid-stream of a process ... i'm thinking of a wizard and every time a user clicks on the next button, the state is persisted, at least in memory.

But returning the user where they left off is problematic in my opinion, because something needs to decide where that point is. If it's the application itself, it's going to be complex to program and error prone. If it's the user, they'll be confronted with a history list and it will still be complex to program because the app will always need to save state for every point on that history list and be able to restore to that point.

In a graphic design program with drawing tools, a history with multiple undo's that allow you to restore to any point can be a very valuable asset, because users are constantly experimenting. But from what you've described, that ability seems much more like an edge case to me. And it's a web application, so users can't quickly click around in the history to find their place. Each click is necessarily a page reload. So a history option is not nearly as usable in a web app as in a desktop app.

I'm thinking you should just let the user be responsible for this edge case. Sometimes, that's easier for the user than anything the application could do to try and manage it for them. They'll need to find their own way back to where they were in the process, or start again if they don't take responsibility themselves, complete the process and "Save". And i'm also thinking that if you remove this edge case from your requirements list, a simple solution might be more within reach.

Was that helpful? Or am i completely misreading the situation?

:) nando


William Langshaw wrote:
Yes, a Rules Engine is the Enterprise, heavy-weight approach. I am
looking for something more basic, something that can be implemented in
a short amount of time. Maybe I am being unrealistic.



On 5/7/06, Nat Papovich <[EMAIL PROTECTED]> wrote:
You should look into rules engines. A rule engine lets you
declaratively sequence workflows (among other things) outside of the
application logic. You can change the rules by which the system
operates after the application is finished or even during runtime. And
changing those rules can be done by a non-technical person (depending
on the rules engine).

http://en.wikipedia.org/wiki/Rules_engine
http://herzberg.ca.sandia.gov/jess/

NAT

On 5/7/06, William Langshaw <[EMAIL PROTECTED]> wrote:
> We are designing an MVC based application. For reasons I wont go into
> right now, we have decided not to use any of the existing frameworks
> (e.g. MachII) and are rolling our own. We have everything go through a
> primary controller file and have devised a URL schema which allows us
> to declare "events" and the CFCs that handle them. So far so good. All
> of our functionality is offloaded to service type CFCs, so we have a
> page that lists all templates in the system. You click on a template
> and it loads a WYSISYG editor, etc. We want to really generify
> everything so that after submission and the content is saved to the DB
> it somehow knows where to redirect the user too. We want our
> components to have nothing hard-coded in them like where to go after
> processing. Ideally, we want to be able to arbitrarily chain our
> components together and there is the idea of a workflow. Now, for this
> one page, we could just pass in a variable like "completeURL" or
> something like that. But if our workflow talks to 3 different
> components, the 3rd wouldnt now how to get back to the 1st, since you
> are only maintaining one variable.
>
> How do people go about this right now? One approach we came up with is
> that you maintain a stack of "visited" managers (components) that you
> visit and you push/pop off the stack as you go around. But this
> quickly gets complex and its just doesnt feel right. Where would this
> stack live? In Session scope...? That doesnt feel right. Plus, what
> would happen if in the middle of a workflow the user decides to go off
> to some random place (their phone rangs and someone says, "hey bob,
> can you go off to such-and-such page really quick and get me some
> information..."...at this point your stack is polluted. If you can
> somehow GUARANTEE the user is going to stay within their boundaries
> this might work. But since you cant guarantee this, all bets are off.
>
> So I guess my question is: how do people build generic and abstract
> components that can be pulled together at a later date and workflows
> devised out of them?
>
> Thanks in advance
> -William
>
>
> ----------------------------------------------------------
> You are subscribed to cfcdev. To unsubscribe, send an email to [email protected] with the words 'unsubscribe cfcdev' as the subject of the email.
>
> CFCDev is run by CFCZone (www.cfczone.org) and supported by CFXHosting (www.cfxhosting.com).
>
> An archive of the CFCDev list is available at www.mail-archive.com/[email protected]
>
>
>


----------------------------------------------------------
You are subscribed to cfcdev. To unsubscribe, send an email to [email protected] with the words 'unsubscribe cfcdev' as the subject of the email.

CFCDev is run by CFCZone (www.cfczone.org) and supported by CFXHosting (www.cfxhosting.com).

An archive of the CFCDev list is available at www.mail-archive.com/[email protected]





----------------------------------------------------------
You are subscribed to cfcdev. To unsubscribe, send an email to [email protected] with the words 'unsubscribe cfcdev' as the subject of the email.

CFCDev is run by CFCZone (www.cfczone.org) and supported by CFXHosting (www.cfxhosting.com).

An archive of the CFCDev list is available at www.mail-archive.com/[email protected]





--


Aria Media Sagl
CP 234
6934 Bioggio
Switzerland
www.aria-media.com


Reply via email to