Так что если Сингелтон вызывает метод, который выдает исключение - PullRequest
0 голосов
/ 10 января 2012

Так что это продолжение предыдущего вопроса, который я задал: Попытка выяснить, дает ли этот код какую-либо выгоду, используя Singleton

В двух словах, я имеюунаследовал плохо спроектированную программу, которая использует псевдо-фасадный класс и помещает его в Singelton.Каждый вызов метода проходит через Синглтон, который затем вызывает разные методы.

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, вызовет ошибку?

Например:

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

Должен ли я беспокоиться о том, что синглтон может отображать сгенерированную ошибку не для того пользователя?

Когда у меня есть возможность рефакторингаЯ избавляюсь от Singleton, но пока я просто не хочу случайно добавить огромную дыру в безопасности, добавив лучшую обработку исключений.

-Chad

1 Ответ

2 голосов
/ 10 января 2012

Нет никакого способа, чтобы выброшенное исключение отображалось другому «пользователю».Исключение выдается в стеке вызовов текущего вызова, поэтому если два разных потока будут вызывать Method2, а в потоке A внешний метод генерирует исключение, а в потоке B - нет, то только поток A получитисключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...