因此,如果一个Singelton调用了一个抛出异常的方法

本文关键字:一个 抛出异常 方法 Singelton 如果 因此 调用 | 更新日期: 2023-09-27 18:20:05

所以这是我之前问的一个问题的后续:试图弄清楚这个代码是否通过使用Singleton 带来了任何好处

简而言之,我继承了一个架构不好的程序,该程序使用了一个伪facade类并将其放入Singelton中。每个方法调用都经过Singleton,然后Singleton调用不同的方法。

Singelton看起来是这样的:

public class FooFacade
{
    private static FooFacade m_facade = null;
    private static DataAccessManager m_dataAccessMgr = null;
    public StringBuilder Status {get; set; }
    private FooFacade()
    {
        this.Status = new StringBuilder();
    }
    public static FooFacade getInstance()
    {
        if (m_facade == null)
        {
            m_dataAccessMgr = DataAccessManager.getInstance();
            m_facade = new FooFacade();
        }
        return m_facade;
    }
    public void clearStatus()
    {
        this.Status.Remove(0, Status.Length);
    }
    public void Method1(string value1, int value2)
    {
        // do something
    }

    public int Method2(int value1, int value2)
    {
        return externalMethod(value1, value2)
    }
}

因此,在上面的这个例子中,如果在Method2中调用的externalMethod抛出错误,是否会存在安全问题?

例如:

public int externalMethod(value1, value2)
{
    try
    {
        return value1/value2;
    }
    catch
    {
        throw;
    }
}

在这种方法中,我是否应该担心Singleton可能会向错误的用户显示抛出的错误?

当我有机会重构时,我会去掉Singleton,但与此同时,我只是不想通过添加更好的异常处理意外地添加一个巨大的安全漏洞。

-乍得

因此,如果一个Singelton调用了一个抛出异常的方法

抛出的异常不可能显示给另一个"用户"。异常是在当前调用的调用堆栈中抛出的,因此,如果两个不同的线程要调用Method2,并且在线程A中,外部方法抛出异常,而在线程B中则不抛出异常,那么只有线程A会接收到异常。

相关文章: