2015-05-29 6 views
1

Давайте предположим, что у нас есть класс, который запустить приложение (назовём его Main класс) и вызов бизнес-логики класса (назовём его Logic класс). Класс Основной отвечает за связь с пользователем.Исключение обработки сообщений

Logic класс бросает некоторые SpecificException который перехватывается Main. Это исключение может иметь сообщение плюс некоторые специфические информация, которая может быть выгодна.

Давайте рассмотрим несколько сценариев.

  1. Определим сообщение и specificInfomation полей в SpecificException, заполнить эти параметры, когда это исключение и объединить сообщение для пользователя в Main на основе введенных полей.
  2. Определит только сообщения поля в SpecificException и построить сообщение вместе с конкретной информации где отбрасываются это исключение. В Main мы просто печатаем сообщение.
  3. Определим сообщение и specificInformation полей в SpecificException, но они используются только журнал информации, содержащейся в Main, сообщение для пользователя строится отдельно.

Какой лучший выход из этих трех?Или, может быть, вы могли бы предоставить свой собственный?

+0

Сообщение для людей, чтобы читать. Если этого достаточно, не используйте поля. Если вы фактически написали фактическую информацию позже, используйте поля. В случае «может быть полезно» не делайте этого, пока у вас не будет варианта использования для необходимых значений позже. –

+0

В этом случае возникает вопрос, следует ли отличать пользователей и разработчиков и иметь для них отдельные сообщения. – Rufi

+0

Пользователи никогда не должны видеть сообщения трассировки стека. Это для разработчиков. –

ответ

0

Из того, что вы написали логику бросает SpecificException, но некоторые конкретные данные могут быть доступны только в Main (и если у вас есть различная электрическая сеть может быть семантический различными, т.е. они могут зависеть от контекста).

Таким образом, кажется разумным, что SpecificException предоставляет только контекстную информацию, которая может быть предоставлена ​​по Logic, а затем в Main вы можете иметь вспомогательный класс, который использует SpecificException и конкретную информацию для создания пользовательского сообщения и (если это необходимо) журнала (на файл, db и т. д.) некоторые сведения, которые могут быть использованы позже для статистики или чего-то подобного.

Класс помощника может управлять различной Главной/Специфической информацией (может быть в Main, вы выполняете разные вызовы Logic, и для каждого вызова вы можете предоставить разные SpecificInformation). Вспомогательный класс также может управлять более чем одним классом исключений

+0

Хорошо, похоже, было какое-то недоразумение. Информация может быть доступна в Logic - не стоит беспокоиться, вопрос в основном заключается в том, как мы должны доставлять его в Main, и если мы должны отделять сообщения от разработчиков и пользователей. – Rufi

+0

Я также не вижу такой большой точки, чтобы создать отдельный вспомогательный класс, если я могу изменить это поведение SpecificException, однако, возможно, более выгодно иметь родительское исключение. – Rufi

+0

Если у вас есть вся информация в логике, я предпочитаю строить сообщение пользователя в Main и управлять в исключении сообщением для разработчика. – Giovanni

Смежные вопросы