Задать вопрос
@evomed

Можно ли обращаться к фасаду из класса, который этот фасад вызывает?

Есть фасад Payments. Он связан с реализацией PaymentManage который вызывает различные классы платежей. Например CreatePayment и CheckStatus. Эти классы связаны с абстрактным PaymentService и у них внутренние связи налажены через parent. Но есть еще PriceConvert, который также вызывается в PaymentManage. И вдруг в CheckStatus мне понадобился PriceConvert. Я могу вызывать его через фасад Payments::priceConvert? Или мне нужно создать объект PriceConvert и вызвать нужный метод? Просто с одной стороны фасад Payments лежит ниже чем эти классы - это просто точка доступа для контроллеров итд. И я не могу обращаться с высокого уровня на низкий. С другой стороны создавать объекты, когда есть фасад тоже не хочется. По эстетическим соображениям и пока не понимаю что может произойти т.к. все равно юзаю фасад и если что подменяться будет как раз реализация, а не фасад. Как будет правильно?
  • Вопрос задан
  • 97 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
Весь вопрос звучит как какой-то оверинжиниринг.
0. Без диаграмм вообще поток мыслей сложно понять.
1. Фасад - это не способ легализовать божественный класс.
2. Циклические зависимости - это не всегда смертельно плохо, но всегда очень подозрительно.
3. Не нужно накидывать все паттерны, какие ты знаешь, если только что прочитал какую-то умную книжку или статью. Иногда лучше всё-таки сделать по принципу KISS и YAGNI.

Или мне нужно создать объект PriceConvert и вызвать нужный метод?

Зачем на каждую мелкую операцию делать отдельный класс и создавать постоянно новые объекты?

Просто с одной стороны фасад Payments лежит ниже чем эти классы - это просто точка доступа для контроллеров итд.

Фасад же типа по определению должен быть выше всех, как наиболее высокий уровень абстракции. С чего это вдруг он оказался ниже всех? И что у тебя подразумевается под контроллерами? Обычно контроллерами в вебе называют обработчики http-запросов. Тогда контроллеры должны зависеть от фасада, а не наоборот.

и у них внутренние связи налажены через parent
.
Что это вообще значит?

Payments::priceConvert

Почему вообще платежи отвечают за конвертацию курсов валют? Или что делает priceConvert?
Ответ написан
@evomed Автор вопроса
Пришел к выводу, что даже из сервисов надо вызывать именно фасады, потому что:
1) Там не может быть рекурсии т.к. хоть фасад один, но сервисы он вызывает разные т.к. фасад сам по себе является менеджером сервисов.
2) При вызове фасада можно подменять реализации, чего нельзя делать если обращаться напрямую к классам.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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