2011-08-15 30 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框架。