Какой шаблон дизайна больше подходит для регистрации?

10

Я должен регистрировать некоторые события в программе, но, насколько я знаю, было бы лучше оставить код регистрации вне программы, потому что это не касается реальной функциональности программы. Можете ли вы сказать мне, если я должен полностью исключить его из кода и использовать только Наблюдатели и Слушатели для регистрации событий? Или я могу добавить строку кода, подобную следующей, где мне нужно что-то записать:

MyGloriousLogger.getXXXLogger().Log(LogPlace, new LogObject(z1, z2, z3, z4, ..., z99));

Могу ли я ошибиться, используя шаблон проектирования Observer? Мне нужен другой шаблон дизайна? Или я должен перестать думать о шаблонах дизайна?

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

PS2. Я, конечно, знаю, что существуют разные библиотеки для входа в Java, и я использую java.utils.logging, но мне нужна оболочка для регистрации моих специальных объектов.

user1892555
источник
2
В Java уже есть 17 каркасов логирования и мета-логинга (slf4j) и, возможно, некоторые мета-мета-каркасы, и ни одна из них не работает для вас?
Кевин Клайн

Ответы:

15

Loggingобычно реализуется с шаблоном цепочки ответственности . Конечно, вы можете (и я бы) сочетать это с фасадом . Я действительно не буду использовать Слушатель (и) или Обозреватель (и) сам.

Цепочка ответственности - Logger

Эллиот Фриш
источник
Это в основном говорит "напишите в свой абстрактный логгер в своем коде"? Я предполагаю, что мой вопрос таков: должен ли я запускать события из того места, где я хочу войти, и предоставлять прослушиватель, который регистрируется в ответ на события, или я должен напрямую вызывать свой сервис Logger (который использует внутреннюю цепочку ответственности) и все?
Fire-Dragon-DoL
8

Используйте Аспектно-ориентированное программирование, которое использует советы после, до и вокруг методов. Там, в соответствии с вашими потребностями, вы можете добавить журналы до запуска API, после или при некоторых условиях, а также отделить ваш основной код от кода регистрации.

Йогеш Патил
источник
0

Ну, Обозреватель кажется мне непригодным. Кроме того, отбрасывание вызовов регистратора «куда вам нужно» разрушит ваш код и нарушит SRP.

Для этого вас может заинтересовать, например, AOP, поэтому вы можете прикреплять вызовы регистратора с помощью аннотаций методов.

Powerslave
источник
0

Кажется, что цепочка ответственности - хороший пример, когда ваши результаты могут появиться в нескольких местах. В UML у вас есть другой регистратор, который направляет на консоль, другой на errorFile, а третий - просто на информационный регистратор.

Обычно я видел, что logLevels разные, но файл журнала такой же.

Я не вижу паттерна наблюдателя настолько плохим для регистрации, поскольку он отделяет ваш код регистрации от кода приложения. Это хорошая практика, таким образом легко перейти на другие механизмы ведения журнала. Каждый раз, когда вы хотите войти, запустите событие, и соответствующий слушатель получит событие и зарегистрирует его. Должен быть промежуточный одноэлементный объект, который содержит список всех регистров.

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

user2922188
источник