2014-12-05 2 views
2

В стандартном веб-приложении J2EE, считая, что время загрузки классов при запуске приложения не является проблемой, что было бы лучшим подходом с точки зрения обслуживания, производительности и удобства использования?Что лучше? Многие специализированные классы исключений или один класс исключений со многими настраиваемыми кодами исключений?

Первый подход предполагает создание разных классов исключений, каждый из которых обозначает конкретную ошибку, которая возникает в приложении. Имена классов являются самоочевидными, и они будут использоваться для предоставления сообщений об ошибках. (ОБНОВЛЕНИЕ: количество классов составляет около 30 на данный момент, и оно будет продолжать увеличиваться в ближайшем будущем, вероятно, до 70 или 80 максимальных значений)

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

+0

Создание различных исключений всегда более чистое. Если вы хотите, вы можете поймать «Исключение» впоследствии. Но как разработчик, что по вашему мнению должно быть более предпочтительным? Что заставляет вас думать, сделает ваш код более управляемым? – holmes840

ответ

1

Это более или менее зависит от вашего business needs. С моей точки зрения, наличие нескольких настраиваемых классов исключений - правильный подход.

Учитесь у Java, сколько он управляет.

В любом приложении может быть n type of validations, немногие могут избить под одну группу, несколько в другой, но все установки в сингле не решает цель с точки зрения логики и бизнеса.

пусть говорят,

UserAuthenticationException

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

1.) Неверные имя пользователя/пароли

2.) Тайм-аут сеанса

3.) Multiple активный знак того же пользователя в различных машинах и т.д. ...

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

+0

Подход «множественного исключения» - это тот, который я собираюсь принять. Но меня мало волнует, что количество классов исключений может со временем увеличиваться (я еще не разработал всю схему. Мы будем определять больше классов исключений по мере развития). И я также использую пользовательские ** обработчики **, чтобы поймать эти исключения. Я также обеспокоен использованием ** instanceOf ** и ** isInstance() **. Некоторые говорят, что использовать их плохо, а некоторые говорят, что это хорошо. Я заметил, что instanceOf используется в нескольких обычных основных классах Java и оценил, что это не может быть _that bad_. – Barath

+0

@ Барат, как я упомянул в своем ответе, в любом случае продукт/существующее приложение исключение никогда не будет увеличиваться экспоненциально, infact это сообщение об ошибке увеличивается. например, как только u hve создал say 'UserAuthenticationException', тогда все будущие проверки, связанные с действиями пользователя и т. д., будут скрыты под этим. Similary может быть «BusinessValidationException», которое может скрыть ваши другие проверки, такие как проверки формы и т. Д. –

+0

@Barath я просто дал вам пример для 'instanceOf', есть и другие способы поймать их по всему миру, Spring framework предоставляет ему собственный механизм, всегда можно вникать и находить. Для любой проблемы всегда есть душа. –

0

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

Это также позволяет вам уловить те конкретные исключения, которые выбрасываются в другие части вашего кода. Возможно, вам нужно сделать дополнительную работу, если исключение было исключение «Файл не найден», и в этом случае вы можете поймать только те исключения, которые вы хотите обрабатывать по-разному - это было бы намного сложнее, если бы они были одинаковыми классами ,

Классы существуют в ООП по определенной причине, и вы должны воспользоваться преимуществами этих причин.

0

С точки зрения точки maintabaility кода, первый подход, поскольку это приводит к более чистым/более простым кодам.Имя класса исключений дает вам причину проблемы, не проверяя атрибуты класса исключений.

С точки зрения производительности второй подход: «меньшее количество классов исключений означает меньшую площадь памяти и меньше времени на загрузку классов» (Эффективная Java, пункт 60). Имейте в виду, однако, что «преждевременная оптимизация - это корень всего зла», поэтому пока вы не подтвердите, что ваше приложение имеет проблемы с производительностью, не пытайтесь его оптимизировать.

0

Большинство исключений в приложении обрабатываются некоторым общим восстановлением; вероятно, включает в себя создание файла журнала и убийство или перезапуск процесса. Нет никаких причин, чтобы они были разными типами.

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

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