Паттерн Фабрика или Фасад?

В своем проекте я использую популярную библиотеку для логирования - Monolog, которая имеет достаточно много вариантов использования.

Для своего проекта, на текущем этапе, мне нужно иметь 2 вида логирования:

1. Логирования в файл
2. Отправка логов в очередь rabbitmq

В разных частях приложения нужен один из этих логгеров, или одновременно оба.

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

Т.е. нам нужно решить две задачи:
1. Упростить интерфейс логгера, и его конфигурирование. Т.е. это явно паттерн Фасад.
2. Нужные разные типы логгеров. Сейчас нужно два типа, потом будет больше. Тут скорее всего нужен паттерн Фабрики.

Какой именно паттерн подходит для моей задачи не пойму, можно ли их комбинировать ? или они могут исключать друг друга ?

В голову приходит два варианта решения:

1. Использовать паттерн Фасад: для каждого типа логгера свой Фасад. Оба Фасада будут иметь единый интерфейс (с методом добавления в лог).

2. Использовать паттер Фабричный метод, только как именно его задействовать не пойму.

Подскажите пожалуйста, какой вариант предпочтительнее ?
И если можно пример второго варианта, как на практике это делается ?
  • Вопрос задан
  • 380 просмотров
Решения вопроса 1
Samouvazhektra
@Samouvazhektra
Отчаянная домохозяйка
Вообще-то в монологе есть каналы для этого
https://github.com/Seldaek/monolog/blob/master/doc...
А так же собственно, кастомные хендлеры/процессоры. В коде ты используешь стандартный логгер интерфейс, а что куда писать и слать разруливается кофигурацией монолога через di. А если его нет, то стоит задуматься именно о нём, особенно если в перспективе еще какие-то другие форматы и способы логгирования понадобятся - всё будет разруливаться в едином месте через доп. хендлеры/форматтеры и каналы при конфигурации логгера.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Zifix
@Zifix
Barbatum
В данном случае, вы запутались в паттернах, потому что на самом деле они вам и не нужны. Просто сделайте, как считаете нужным, без переусложнения. Если окажется, что работать с получившейся обвязкой неудобно — отрефакторите.

Как два программиста хлеб пекли +

Вот тут в комментах товарищ отлично излагает:

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

Паттерны это сборник примеров того, как можно сделать. Не образец для подражания, не набор готовых блоков.

Если обратиться к реальной архитектуре, в смысле домов, то мы увидим что из готовых блоков можно построить хрущевку, в 3 этажа или в 5, в 5 подъездов или в 10. Но ничего кроме хрущевки нельзя. Ни мост, ни любое другое нормальное здание. Только тупую панельку.

Вот тоже и с паттернами. Паттерны не подменяют и не заменяют умение проектировать. Да, они задумывались для этого, но эта попытка провалилась. Даже если ты из лего замок строишь, нужно понимать что ты делаешь, а не бездумно блоки совать.
Ответ написан
@sergeyiljin
Делаю дело
Соблюдай SOLID в проектировании и всё будет гуд.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы