Exception 在多个方法中模板化大量完全相同的异常
我有一些类似这样的遗留代码:Exception 在多个方法中模板化大量完全相同的异常,exception,design-patterns,aspectj,aop,Exception,Design Patterns,Aspectj,Aop,我有一些类似这样的遗留代码: public class RmiClient { public boolean method1() throws RmiException { try { IRmiServerMethods server = (IRmiServerMethods) Naming.lookup(serverName); return server.method1(); } cat
public class RmiClient {
public boolean method1() throws RmiException {
try {
IRmiServerMethods server = (IRmiServerMethods) Naming.lookup(serverName);
return server.method1();
}
catch (NotBoundException e) {
throw new RmiException("server not found");
}
catch (MalformedURLException | RemoteException e) {
e.printStackTrace();
throw new RmiException(e);
}
}
public boolean method2(Parameter parameter) throws RmiException {
try {
IRmiServerMethods server = (IRmiServerMethods) Naming.lookup(serverName);
return server.method2(parameter);
}
catch (NotBoundException e) {
throw new RmiException("server not found");
}
catch (MalformedURLException | RemoteException e) {
e.printStackTrace();
throw new RmiException(e);
}
}
}
方法的清单上有数千行
有没有更好的方法来处理这些过度的异常处理?如何去掉这个锅炉板?是否有一些好的编程模式来处理这种情况?方面是否是这里的方式
虽然我确信这个问题以前可能有人问过,但我找不到它
有没有更好的方法来处理这些过度的异常处理
通过Naming.lookup()方法引发的所有异常都会被检查,因此您必须捕获它们,或者让调用堆栈更高的方法处理它们。这方面没有解决办法。然而
是否有一些好的编程模式来处理这种情况
我认为问题在于,您的代码与需要调用RMI服务的事实高度耦合。在客户端代码中添加一个隐藏实现细节的抽象层可能是解决方案
一个非常简单的选项是使用一个助手类,该类负责执行Naming.lookup()方法并处理抛出的异常。因此,每次客户端代码必须调用远程服务时,它都会与这个封装RMI调用问题的助手类进行对话
如果不了解应用程序的体系结构,就很难谈论模式,但一般来说,一个旨在解耦的模式将对您有所帮助
如何去掉这个锅炉板
如果有数千行代码处理这个问题,我看不出一个简单的方法来摆脱这个代码。也许最好的选择是设计一个解决方案,并开始在新代码中使用它,然后逐步重构现有的解决方案。我认为AOP不能帮你解决这个问题。嗨,很抱歉没有早点接受你的回答。最后,我做了“一个非常简单的选择是使用一个助手类,该类负责执行Naming.lookup()方法并处理抛出的异常。”-基本上与您建议的完全相同。您是对的,代码(大约有1600行)必须调用大量的RMI服务。这是无可奈何的。