Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Exception 在多个方法中模板化大量完全相同的异常_Exception_Design Patterns_Aspectj_Aop - Fatal编程技术网

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服务。这是无可奈何的。