MVP 設計模式在 SharePoint Workflow 中的應用

對SharePoint Workflow進行單元測試是一個非常大的挑戰。因爲SharePoint Workflow 和 SharePoint結合得十分緊密。衆所周知,Workflow必須要寄宿到宿主應用程序中才能運行,因此,Workflow的開發者必須要定義 Communication服務,使得宿主程序和Workflow之間能夠交互數據。由於SharePoint Workflow的宿主固定爲SharePoint,所以SharePoint Workflow能夠預先做好Communication服務,並提供一系列封裝好的Activity,如CreateTask, OnTaskChanged等。這樣的確方便了Workflow的開發,使開發者更集中於業務邏輯。同時,SharePoint和Workflow的耦合 度也大大地增加了。

目前除了購買專門針對SharePoint Workflow的單元測試軟件,好像還沒有更好的辦法。但是,我們可以儘可能地把業務邏輯分離出來,對這部分邏輯進行單元測試。我把SharePoint Workflow開發過程中涉及的邏輯分爲兩部分:

1. Workflow的流轉邏輯。這部分邏輯是在Visual Studio Workflow Designer裏設計的,很難進行單元測試。
2. 自定義的業務邏輯。這部分邏輯是指在Workflow的每一步或每一個狀態中涉及的業務邏輯。如在CreateTask活動invoke的時候,我們會根 據自己的邏輯去決定這個task應該分配給誰,標題是什麼等等。這部分邏輯可以用我即將講到的方法分離出來進行單元測試。

爲了將自定義的業務邏輯和整個Workflow的流轉分開,我們必須加入一個能夠根據業務邏輯修改Workflow內容的模塊。使用MVP(Model View Presenter)可以很好地達到目的。下圖是使用MVP設計模式後的Workflow設計圖:
MVPSPWF-HL

                               圖1. MVP Workflow High Level Design

SharePoint Workflow View: 將業務邏輯中所需要用到的數據收集起來,並暴露給Workflow Presenter.

Workflow Presenter: 負責從Workflow View中取出數據,並使用Operator提供的Method執行業務邏輯。同時,根據Operator返回的數據修改Workflow View中的數據。

Workflow Operator: 處理業務邏輯。

由此可見,只要針對Workflow Operator進行單元測試,就可測試所有的自定義業務邏輯。

接下來是一個例子。先看一下整個設計框架:



                                 圖2. MVP Workflow UML

爲了使Workflow1能夠暴露我們所需要的數據,定義一個IWFView接口。讓Workflow1實現該接口,這樣,Presenter就可獲得處理業務邏輯所需的數據。

定義IWFOperator,規定處理業務邏輯的操作。

SPTaskDTO是一個Data Transfer Object. 它用於將Operator的執行結果傳遞給實際的數據對象。在這裏,SPTaskDTO存有通過WFOperator.CreateTask()創建的 task信息,WFPresenter負責將task信息取出,並通過IWFView.get_CreateTaskProperties().xxx = task.xxx 改變Workflow1的數據。

以下是整個應用程序的順序活動圖:



                                圖3. MVP Workflow Sequence Diagram

通過MVP設計模式,可以將自定義業務邏輯完整地分離出來,從而可以進行單元測試。但是,Workflow的流轉邏輯依然無法測試,希望有高手能夠給出一點建議。

源代碼請在附件中下載。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章