Как правильно обработать ошибки в n-tier приложении?

Для PostgreSQL Вы могли использовать Другой Инструмент Разности PostgreSQL . Это может разность два Дампа SQL очень быстро (несколько секунд на дб приблизительно с 300 таблицами, 50 представлениями и 500 хранимыми процедурами). Таким образом, можно найти изменения легко и получить sql разность, которую можно выполнить.

От Страницы APGDiff:

Другой Инструмент Разности PostgreSQL является простым инструментом разности PostgreSQL, который полезен для обновлений схемы. Инструмент сравнивает два файла дампа схемы и создает выходной файл, который является (после некоторых модификаций ручной работы) подходящий для обновления старой схемы.

6
задан Mike 30 September 2009 в 11:56
поделиться

3 ответа

Насколько я понимаю, у вас есть три попытки / уловки - по одному для каждого уровня: DAL, BLL, UI.

Вы следует ловить только тогда, когда вы собираетесь что-то с этим сделать.

Насколько я понимаю, вы просто отказываетесь от DAL, поэтому в этом нет необходимости.

Из BLL вы регистрируете исключение, и это хорошая практика, поскольку вы смогу собирать данные об исключениях, чтобы в конечном итоге улучшить приложение.

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

5
ответ дан 16 December 2019 в 21:43
поделиться

В отличие от других ответов, я советую также удалить try / catch из вашего пользовательского интерфейса. Ваш BLL должен перехватить исключение, зарегистрировать его, а затем предоставить некоторый механизм для пользовательского интерфейса, чтобы запросить, какие ошибки произошли.

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

if (businessObject.doSomeOperation == true) {
   // Do whatever you need to here.
} else {
   // output error message from businessobject
   // something like businessObject.LastErrorMessage();
}
2
ответ дан 16 December 2019 в 21:43
поделиться

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

try
        {
            //your code
        }
        catch (System.Data.SqlClient.SqlException ex)
        {
            if (ex.Number == 547)
            {
                throw new Exception("ActiveRecord");
            }
        }
        finally
        {
            MasterConnection.Close();
        }

Catech выполнение в пользовательском интерфейсе и отображение удобного для пользователя сообщения.

 if (e.Exception != null)
    {
        if (e.Exception.InnerException.Message == "ActiveRecord")
        {
            //Show here User freind message
        }
    }
1
ответ дан 16 December 2019 в 21:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: