Я должен регистрировать некоторые события в программе, но, насколько я знаю, было бы лучше оставить код регистрации вне программы, потому что это не касается реальной функциональности программы. Можете ли вы сказать мне, если я должен полностью исключить его из кода и использовать только Наблюдатели и Слушатели для регистрации событий? Или я могу добавить строку кода, подобную следующей, где мне нужно что-то записать:
MyGloriousLogger.getXXXLogger().Log(LogPlace, new LogObject(z1, z2, z3, z4, ..., z99));
Могу ли я ошибиться, используя шаблон проектирования Observer? Мне нужен другой шаблон дизайна? Или я должен перестать думать о шаблонах дизайна?
PS1. Если я хочу регистрироваться, используя только слушателей и наблюдателей, мне непременно нужно добавить и улучшить наблюдателей и слушателей программы.
PS2. Я, конечно, знаю, что существуют разные библиотеки для входа в Java, и я использую java.utils.logging, но мне нужна оболочка для регистрации моих специальных объектов.
источник
Ответы:
Logging
обычно реализуется с шаблоном цепочки ответственности . Конечно, вы можете (и я бы) сочетать это с фасадом . Я действительно не буду использовать Слушатель (и) или Обозреватель (и) сам.источник
Используйте Аспектно-ориентированное программирование, которое использует советы после, до и вокруг методов. Там, в соответствии с вашими потребностями, вы можете добавить журналы до запуска API, после или при некоторых условиях, а также отделить ваш основной код от кода регистрации.
источник
Ну, Обозреватель кажется мне непригодным. Кроме того, отбрасывание вызовов регистратора «куда вам нужно» разрушит ваш код и нарушит SRP.
Для этого вас может заинтересовать, например, AOP, поэтому вы можете прикреплять вызовы регистратора с помощью аннотаций методов.
источник
Кажется, что цепочка ответственности - хороший пример, когда ваши результаты могут появиться в нескольких местах. В UML у вас есть другой регистратор, который направляет на консоль, другой на errorFile, а третий - просто на информационный регистратор.
Обычно я видел, что logLevels разные, но файл журнала такой же.
Я не вижу паттерна наблюдателя настолько плохим для регистрации, поскольку он отделяет ваш код регистрации от кода приложения. Это хорошая практика, таким образом легко перейти на другие механизмы ведения журнала. Каждый раз, когда вы хотите войти, запустите событие, и соответствующий слушатель получит событие и зарегистрирует его. Должен быть промежуточный одноэлементный объект, который содержит список всех регистров.
Таким образом, я вижу, что мы можем отделить наш код регистрации от кода приложения.
источник