# Facade паттерн в Javascript

poster
В этом видео мы с вами разберем паттерн facade. Он заключается в том, чтобы создать простой интерфейс к большой и сложной части кода, чтобы спрятать его сложность.
Понравилось? Поделитесь с друзьями!
Понравилось?
Поделитесь с друзьями!
Комментарии
Текст видео

В этом видео мы с вами разберем паттерн facade. Это очень часто используемый паттерн. Он заключается в том, чтобы создать простой интерфейс к большой и сложной части кода, чтобы спрятать его сложность.

То есть вместо того, чтобы знать все о сложной части, мы знаем только пару методов, которые будут делать, что нам нужно, с сложной частью и мы не будем знать, что там происходит внутри вообще. Это и есть фасад.

Давайте с вами напишем пример паттерна facade.

Допустим у нас есть несколько источников данных о человеке. Это банк, кредитная история и баланс его аккаунта. Давайте создадим их сейчас.

class Bank {
  verify (amount) {
    return amount < 999
  }
}

Мы создали класс Bank, у которого есть метод verify, который проверяет можно ли дать кредит или нет. И в зависимости от суммы мы возвращаем true или false. Конечно, мы пишем сильно упрощенную логику. В реальности мы бы передавали туда юзера и проверяли бы его данные, перед тем, как решать давать кредит или нет.

Теперь давайте добавим класс кредитной истории.

class CreditHistory {
  check (name) {
    return true
  }
}

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

И класс проверки баланса, где будет метод, который говорит положительный ли у нас баланс или отрицательный.

class Balance {
  check (name) {
    return true
  }
}

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

Мы хотим, чтобы его можно быть использовать в таком виде.

const credit = new Credit('John')
const creditSmall = credit.applyFor(99)
const creditMedium = credit.applyFor(199)
const creditLarge = credit.applyFor(99999)
console.log('creditSmall', creditSmall)
console.log('creditMedium', creditMedium)
console.log('creditLarge', creditLarge)

То есть, мы создаем новый экземпляр класса Credit и у него есть метод applyFor, в который мы передаем сумму кредита, которая нам нужна. И результатом будет сообщение.

Как вы видите, если мы создадим такой фасад, то мы сможем легко узнавать результат по кредиту не зная, что именно проверяется внутри и насколько сложная логика там находится. Мы просто вызываем applyFor и получаем результат.

Теперь давайте опишем класс Credit, который и будет нашим фасадом.

class Credit {
  constructor (name) {
    this.name = name
  }

  applyFor (amount) {
    const isApproved = new Bank().verify(amount)
    const bankResult = isApproved ? 'approved' : 'denied'
    const isPositiveBalance = new Balance().check(this.name)
    const balance = isPositiveBalance ? 'positive balance' : 'negative balance'
    const isGoodCreditHistory = new CreditHistory().check(this.name)
    const creditHistory = isGoodCreditHistory ? 'good' : 'poor'

    return `${this.name} has been ${bankResult} for the ${amount} credit. With a ${creditHistory} credit standing and having a ${balance}`
  }
}

В методе applyFor мы создали новые экземпляры классов и вызвали нужные методы, для получения результатов о юзере, кредите и кредитной истории. Потом мы сгенерировали сообщение о результате по кредиту.

Если мы посмотрим в браузер, то мы получили три сообщения, который были сгенерированы в соответствии с нашей логикой.

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

Если у вас возникли какие-то вопросы или комментарии, пишите их прямо под этим видео.

Только зарегистрированные пользователи могут оставлять комментарии.  Войдите, пожалуйста.
maksimka
11 месяцев назад
Почему нельзя скачать видео? У меня комп дома старый, глаза болят от долгого просмотра. Обычно качаю и смотрю либо дома через dvd-плеер, либо на работе часик выделяю на самообразование (на работе интернета нет - запрещено)
monsterlessons
11 месяцев назад
Это сделано для того, чтобы люди больше взаимодействовали с сайтом, оставляли комментарии, а не просто выкачали все видео и смотрели оффлайн.
Valerii Kuzivanov
1год назад назад
Сейчас перемотрел видео. Оказывается я часто применяю этот паттерн на старом коде, где что-то менять опасно, а сделать обертку возможно. Только я не знал что это фасад.)) Но я обычно возвращаю не строку, а обьект свойств. А уже на выходе в пользовательский интерфейс формирую строку. Так гибче.
monsterlessons
1год назад назад
Это был базовый пример. Конечно в реальном проекте возвращают обычно обьект свойств.
Valerii Kuzivanov
1год назад назад
Привет! Что думаешь по поводу RxJs ? Не хочешь видосики записать как по лодэшу например?
monsterlessons
1год назад назад
Привет. Спасибо за идею, добавил в список будущих видео. Но пока не хватает времени записать все, что хочется.