2011-10-11 26 views
1

我正在寻找关于在基于PureMVC的应用程序中实施流程流程/工作流程管理的建议。在PureMVC中实现流程工作流程

我们的Flex应用程序包括许多如账户创建,支付处理等

在我们的团队过程中,有一个我们应该如何拘泥于PureMVC的模型的一些讨论。

在PureMVC模型中,可以在代理中管理进程中的当前状态似乎是合理的。

命令显然负责处理每个节点和节点转换所需的操作。

用于管理UI的调解器。

但是,我认为这里仍然有一个重要的位:ProcessController。

我们审查过的方法似乎都违反了PureMVC模型(甚至略微)或者制作了无法读取的代码。

  • 代理将维护进程的状态。因此,这似乎是实施控制器的适当方式。但是,这将大量业务逻辑放入代理中。

  • 中介空间更有意义,但该空间中的控制器不一定会直接与任何特定的UI元素交互,而是会协调/委托给专用的中介器。

  • 另一个模型可以让我们把过程转换信息放入命令中。虽然这似乎是这项工作的最佳位置(考虑到命令相对于代理和中介的作用),但这种方法似乎会使得一些特别令人发指的代码与分布在几十个命令中的进程转换逻辑相关。

那么别人怎么处理这个问题呢?

感谢 柯蒂斯

+0

简单,因为它的可怕不使用PureMVC的:P –

+0

我完全同意关于PureMVC的!我将把整个该死的东西移动到互联网标准技术人员(HTML5,REST)之前,我会扰乱PureMVC。 –

+0

至少你有Flex中MVC库的选项。如果您要转移到HTML5/Javascript,那么除非您使用Google Web Toolkit之类的东西,否则您将处于更加严重的伤害之中。 –

回答

1

我想你“ProcessController”的想法可能做的更好的方法。就我个人而言,我不是PureMVC的粉丝,也不会使用它,因为它没有足够的灵活性或扩展点来解决这些问题。

坦率地说,很难就您的问题提出建议,因为我不知道您要完成的工作。我同意这个问题需要由一个对象来处理。如果可以的话,尝试创建一个模型来存储流程的数据,并让其他类在整个过程中进行管理。不知道这是否有道理,但是再一次,你的问题也不是很清楚。

作为一个额外的额外,我会研究依赖注入。我试图记住PureMVC是否可以做到这一点(我认为它没有),但是用DI来解决这个问题是一个相当简单的问题。像Parsley和Robotlegs这样的框架非常擅长。

+0

如果描述不好,很抱歉。实质上,我正在寻找实现与Spring WebFlow或甚至Struts功能相同的东西,但是在基于Flex的应用程序中。 PureMVC中没有DI :( –

+0

Flex中的Spring/Struts叫做Parsley或Robotlegs;) –

+0

我使用RobotLegs很多,并且遇到了与您遇到的问题相同的问题。除DI和自动处理介体外,RobotLegs和PureMVC非常相似。哦,RobotLegs使用从特定于上下文的“事件分派器”派发的库存Flash事件,而不是PureMVC的通知类。实施是不同的,但想法是一样的。我使用RobotLegs,因为它更简单,更少的锅炉板,为我处理大部分注册,并且有DI。 FWIW,我认为Cliff's(PureMVC的作者)解决方案就是你需要的。我想知道RL这样的工具是否存在!? –

0

在pureMVC中,状态机实用程序可能是过程控制器的最佳选择 - 顺便说一句,根据实施惯例&最佳实践文档。对于PureMVC,拥有不管理可见组件的介体是完全正确的

4

这正是PureMVC StateMachine Utility(和一般的有限状态机)要解决的问题。

以简单的XML格式,您可以定义状态,到其他状​​态的有效转换以及触发这些转换的操作。

这是所有基于通知的,所以你发送StateMachine.ACTION通知,导致StateMachine执行任何进入/退出警戒逻辑,可能是必要的(例如,只允许退出FORM_ENTRY状态,如果所有的数据有效,或只有当用户具有管理权限时才允许进入FORM_PROCESSING状态等)。如果发生状态更改,则会发送通知,用于在进入新状态时组织视图或执行逻辑。

这里是一个的StateMachine概述演示,会给你一个更好的主意 http://puremvc.tv/#P003/

+0

Cliff,StateMachine看起来很合身。我一定会看看它。 –