2011-08-01 23 views
2

我使用spring-mvc,我的控制器大多包含太多的邏輯。當3 - 5個服務bean構成業務流程並且它們被一個處理程序調用時,則會包含一些驗證,並且會導致幾個if-else條件,並帶有肯定或否定響應。在MVC模式下處理簡單的業務流程?

一個可能的解決方案是擁有一個包含所有對服務bean的引用和其方法的通用接口的外觀。這使得它更簡單,它也可以構成MVC模式中的異常邊界,但是,業務流程仍然有一些邏輯和驗證,並且仍然在處理程序方法中處理。

我應該創建類似這樣的東西嗎? :

BusinessProcess { 

processOrder() { 
    serviceBeanA.call(); 
    result = serviceBeanB.call(); 
    validator.validate(result); // throw exception 
    serviceBeanC.call(result); 
} 
} 

並且在我的處理程序中只使用BusinessProcess bean?捕獲異常或返回值會說出什麼是錯誤的以及應該包含哪些內容。否則processOrder方法的內容將在處理程序中。

這是正確的方法嗎?如果是這樣的話,這個模式如何被調用

回答

0

如果我理解正確,最有可能你應該按照你的建議去做。我不認爲這個「模式」的名稱也不需要。既然你看起來不確定,這就是爲什麼我認爲你正在考慮正確的事情。

處理訂單是您的處理程序感興趣的邏輯抽象。OrderProcessorBean(或BusinessProcessImpl)如何實際完成此操作是實現細節,並且從處理程序/控制器中隱藏。

沒有這樣的bean,你可以在某個控制器中編寫一個processOrder方法,並且控制器具有依賴和引用處理訂單處理細節的服務bean。正如你注意到這是不好的設計。

似乎正確的是,處理代碼可以讓異常飛出,並且不會影響調用者如何處理這些異常。也許一個事務回滾,也許一些包含錯誤消息的HTML被服務給最終用戶,但負責處理訂單的代碼(業務邏輯)不應該知道存在Spring MVC或HTML之類的東西。