2011-10-11 28 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看起來很合身。我一定會看看它。 –