2011-08-15 29 views
3

我有一個servlet,它可以接受多達24種不同類型的請求(稱爲servlet中的命令)。創建了一個非常大的條件來服務於這樣的請求:有條件地重構一個長servlet

if (command.equals("Command1")) 
    doSomething(); 
else if (command.equals("Command2)) 
    doSomethingElse(); 
else if (command.equals("Command3)) 
    doThisOtherThing(); 
...... 

有沒有更好的方法來編寫此代碼?我正在閱讀一本關於JUnit測試的書,該書提出了在條件中使用多態性,但在這個示例中我沒有看到如何做到這一點。有沒有人有更好的主意?

謝謝

埃利奧特

+0

有一個命令模式。它*可能*在您的情況下似乎很有用。我暗示它可能會很有用,因爲模式封裝了一個方法調用,這可能不是您需要的。 –

回答

4

假設你使用Servlet的,你要找的是一個FrontController。基本思想很簡單,你所擁有的每一個命令字符串都可能被映射到一個Map,你會將這些動作交給這些命令。

一個非常簡單的實現可能是這樣的:

Command commandAction = this.commands.get(command); 
commandAction.doAction(request, response); 

這消除了具有IF /開關的需要,你可以有每個命令是一個特定的類,提高您的代碼組織。很顯然,這是重新發明了輪子,因爲Java中的所有Web MVC框架(如Struts,SpringMVC,VRaptor和Play)都實現了這種模式,併爲您免費提供此功能,因此您還可以考慮切換到框架,而不是留在純servlet中並構建自己的本地Web框架。