@Eka2

Как улучшить архитектуру приложения?

Изучаю Spring, хочу вынести обработку и логгирование ошибок в отдельный класс: имеется ряд действий (в разных классах-контроллерах), результаты которых логгируются - удачно или нет они выполнились. В настоящее время это сделано так:
- базовый класс, который выполняет операции. если операция закончилась неудачно, то генерируется исключение с текстом сообщения об ошибке, иначе в лог выдается, что операция прошла успешно
if  (item==null) {
throw new MyException(Message.ERROR_READING);
} 
else 
{
log.info(Message.SUCCESS_READING);
}

- статичный класс с текстом сообщений об ошибках и успешно выполненных действиях
public final class Message {
	public static final String ERROR_READING = "Ошибка получения данных";
	public static final String SUCCESS_READING = "Данные получены";
}

- класс исключения, которому при создании в свойство message передается текстовое сообщение для возникшей ошибки, в конструкторе исключения записывается в лог текст ошибки.
public class ItemException extends RuntimeException {
		static Logger log = Logger.getLogger(App.class.getName());
                public MyException(String message) {
			super(message);
			log.error (message);
		}
}


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

1. Можно ли логгировать из конструктора (чтобы не дублировать каждый раз throw MyException с текстом ошибки и тут же следом лог с тем же текстом)?
2. Как быть с логом успешной операции, вроде сообщение об ошибке зашито в класс ошибки?
3. Делить ли класс Message на два с успешными или не успешными операциями?
  • Вопрос задан
  • 263 просмотра
Пригласить эксперта
Ответы на вопрос 1
TheKnight
@TheKnight
Программист
1) А что мешает сразу на месте залоггировать ошибку без выброса эксепшена? Так ли он нужен там?
3) Не логгируй из конструктора исключения. Не все смогут догадаться найти вызов логгера там.
2) Для сообщений есть хорошая такая штука - Resource Bundle. Позволяют заодно и интернациализацию сделать не так сложно как могло бы быть.

Чем не устраивает стандартный try/catch?
Если уж сильно хочется все повыносить - сделай банальный ExceptionHandler и скидывайв него пойманные и созданные исключения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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