Який шаблон дизайну більше підходить для ведення лісу?


10

Я повинен записувати деякі події в програмі, але, наскільки я знаю, було б краще тримати код журналу поза програмою, оскільки мова не йде про реальну функціональність програми. Тож чи можете ви сказати мені, чи варто я цілком уникати коду та використовувати лише спостерігачі та слухачі для реєстрації подій? Або я можу додати рядок коду на зразок наступного, куди мені потрібно щось увійти:

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

Чи можу я помилитися з використанням шаблону дизайну Observer? Мені потрібна інша модель дизайну? Або я повинен перестати думати про дизайнерські зразки?

PS1. Якщо я хочу ввійти в систему, використовуючи лише слухачів та спостерігачів, мені, безумовно, потрібно буде додати та покращити спостерігачів та слухачів програми.

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


2
У Java вже є 17 каркасів реєстрації та фреймів для мета-реєстрації (slf4j), і, ймовірно, якийсь мета-мета-журнал, і жодна з них не працює для вас?
Кевін Клайн

Відповіді:


15

Loggingзазвичай реалізується за схемою відповідальності . Звичайно, ви можете (і я б) поєднати це з фасадом . Я дійсно не використовував би слухачів або спостерігачів.

Ланцюг відповідальності - лісоруб


Це в основному говорить "написати в свій абстрактний реєстратор у своєму коді"? Я думаю, що моє запитання таке: чи слід запускати події з того місця, де я хочу ввійти та надати слухачеві, який записує журнал у відповідь на події, або я повинен прямо зателефонувати в службу Logger (яка використовує внутрішню ланцюжок відповідальності), і це все?
Франческо Беладонна

8

Використовуйте програмування, орієнтоване на аспекти, яке використовує поради після, перед та навколо методів. Там, відповідно до ваших потреб, ви можете додавати журнали до початку api, після або за деяких умов, а також відокремлювати свій основний код від коду реєстрації.


0

Що ж, спостерігач звучить для мене непридатно. Крім того, підкидання реєстратора на дзвінки "куди вам потрібно" зруйнує ваш код і порушить SRP.

Ви можете, наприклад, зацікавити AOP для цього, щоб ви могли додавати виклики реєстратора за допомогою анотацій методу.


0

Ланцюг відповідальності, здається, є хорошою схемою, коли ваш вихід може розташовуватися в декількох місцях. У UML у вас є інший реєстратор, який спрямовує на консоль, інший до errorFile і 3-й просто реєстратор інформації.

Зазвичай я бачив, що logLevels відрізняються, але файл журналу той самий.

Я не бачу шаблону спостерігачів настільки поганим для ведення журналів, оскільки він відокремлює ваш код реєстрації від коду програми. Це хороша практика, таким чином легко перейти на різні механізми ведення журналу. Кожен раз, коли ви хочете ввійти в систему, зафіксуйте подію та відповідний слухач отримає подію та зареєструє її. Повинен бути проміжний однотонний об'єкт, який містить список усіх регістрів.

Таким чином я бачу, що ми можемо відокремити наш журнал від коду програми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.