Помощь в обработке исключений - PullRequest
3 голосов
/ 02 июля 2010

У меня есть такая структура приложения: 1. Уровень представления, который вызывает 2. Уровень бизнес-логики, который, в свою очередь, вызывает 3. Уровень доступа к данным для работы с базой данных.

Теперь у меня есть страница контактов сгде я могу добавить новый контакт в базу данных.

Таким образом, чтобы добавить новый контакт, я заполняю все необходимые данные и затем вызываю метод Add (находящийся в BLL) со страницы, который, в свою очередь, вызываетa Добавить метод, находящийся в DAL.

этот метод в DAL возвращает текущую идентичность записи, которая затем возвращается обратно в метод BLL и, наконец, доставляется на страницу.

этохорошо.но что если получить исключение, как мне правильно его обработать, потому что метод в DAL имеет тип возвращаемого значения int, и я не хочу выдавать другую ошибку !!потому что в противном случае мне придется написать try catch почти во всех методах.

//something like this
public int AddMethod(ContactClass contactObj)
{
    int result = 0;

    try
    {
        result = ExecuteSomeSP("SPName", SP_Parameters);
    }
    catch(SQLException se)
    {
        throw new SQLException
    }

    return result;
}

скорее я хочу показать пользователю удобное для пользователя сообщение, которое они могут легко понять, а пока я отправлюписьмо самому себе с документированием только что возникшей ошибки.

Также, пожалуйста, скажите мне, как я могу реализовать свои собственные классы исключений.

Скажите, пожалуйста, как мне это сделать !!1017 * спасибо.

Ответы [ 2 ]

3 голосов
/ 02 июля 2010

Вам не нужно пытаться / ловить в каждом методе. Но вам обычно нужно попробовать / поймать каждый слой (для определенного действия).

И это правильно, каждый слой должен иметь дело со своими собственными нарушенными контрактами, очисткой и т. Д.

Преобразование Исключения в "дружественное сообщение" - это нечто для графического интерфейса, а не для нижнего уровня.

А когда вы ловите и повторно генерируете исключение, убедитесь, что вы не теряете информацию, перешлите ее в свойство InnerException:

try
{
   // DAL
}
catch (DALException de)
{
   // Log, ....

   throw new BLLException(message, de);
}
1 голос
/ 02 июля 2010

Не пытайтесь ловить в каждом методе или слое, только если это разумно. Попытка поймать никогда не должна действовать как условная. Уровень представления никогда не должен содержать логику.

Поскольку вы используете интерфейс DAL, я бы создал собственное исключение DalException и выбросил его поверх SQLException

public int addMethod(ContactClass contactObj) throws DalException {
    try {
        return ExecuteSomeSP("SPName", SP_Parameters);
    }
    catch(SQLException e) {
        throw new DalException(e);
    }
}

В вашем слое бизнес-логики поймайте исключение и создайте всплывающее окно, используя уровень представления

public void addMethod(ContactClass contactObj) {
    try {
        dal.addMethod(contactObj);
    }
    catch(DalException e) {
        // notify user
        view.alert(e.getMessage());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...