Рубрики
Без рубрики

Шаблоны дизайна: командование и консьерж в жизни и рубине

С узорами дизайна Sihui Huang: команда и консьерж в жизни и командной структуре RUBYTE и RUBYTE – это стрессовый, чтобы посмотреть. Официальное определение заключается в том, что он: инкапсулирует запрос в качестве объектаThereby, позволяя вам параметризовать другие объекты с разными запросами, очередями или запросами журнала, а также поддерживать нематериалы

Автор оригинала: FreeCodeCamp Community Member.

Sihui Huang

Определение команды шаблона – это стрессовый, чтобы посмотреть. Официальное определение в том, что это:

  • инкапсулирует запрос в виде объекта
  • Таким образом, позволяя вам параметризовать другие объекты с разными запросами, очередями или запросами журнала и поддерживать немаловые операции.

Давайте забываем об этом на секунду и отправиться в путешествие на Гавайи.

И жить в роскошном отеле.

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

Вернувшись в отель, мы хотим:

  1. Получить обслуживание номеров на ужин
  2. Получить услуги прачечной, потому что мы не принесли дополнительную одежду
  3. Получить путеводитель для Кауаи, остров, который мы собираемся завтра

Мы проверяем меню обслуживания отеля и найдите три предмета обслуживания, соответствующие нашим потребностям.

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

Затем каждый сотрудник выполняет в соответствии с каждым конкретным запросом:

  1. Шеф-повар на кухне начинает готовить
  2. Отдел уборки отправляет персонал в нашу комнату, чтобы забрать нашу одежду
  3. Персонал в вестибюле захватывает путеводитель и доставляет его в нашу комнату

Давайте повторим, что только что произошло.

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

б. Консьерж написал эти сервисные запросы в виде списка.

с. После того, как мы повесили, поручено меню сервиса, консьерж отправил наши запросы на соответствующие отделы.

др. Каждый отдел выполнен по данному запросу.

Давайте посмотрим на действия в Руби.

1. Мы представили эти три запроса к консьерже:

2. Эти запросы вошли в список консьержа отслеживает:

Посмотрим, что в действии (консоль):

Как мы видим, после Мы Представил три запроса, эти запросы были в request_list заботиться о Консьерж Отказ

3. Инструктировано меню службы, консьерж отправил наши запросы на соответствующие отделы.

Код выше должен работать нормально.

Кроме одного …

Это пахнет плохой.

В частности, часть, где у нас есть случаи переключателя:

Почему эта часть пахнет плохой?

  1. Если отель предлагает двадцать услуг вместо трех, метод будет очень длинным.
  2. Мы хотим предложить новые услуги или удалить существующую услугу. Однако каждый раз, когда мы должны открыть Консьерж класс и переопределить act_on_requests метод.

T Он метод слишком много знает и требует частых изменений Отказ Наличие этих двух комбинаций вместе почти всегда плохие.

Почему?

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

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

Время рефактору!

Должен быть лучший способ, чем это:

Посмотрите поближе и подумайте об этом.

Давайте перефразием, что делает код на английском языке. Мы зацикливаем через запросы в списке запросов. Для каждого запроса, в соответствии с его типом обслуживания, мы даем соответствующие данные, связанные с департаментом и выполняем запрос. По сути, мы петлю через запросы и выполняем каждого из них соответственно.

Но что, если каждый запрос на самом деле знал, как выполнить себя?

Тогда метод может быть таким же простым, как:

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

С этим говорим, что наши запросы могут выглядеть так:

И обновленные Консьерж будет выглядеть как:

С обновленными кодами вот как мы, клиенты отеля, отправляем запросы на консьерж.

Довольно легко создать другой сервис.

Например, отель также позволяет нам зарезервировать SPA:

Сервис не только поддерживает Выполнить (Делать резервирование SPA), но и отменить (Отмена бронирования).

Допустим, отель также предоставляет другой способ запросить услуги без необходимости позвонить в Concierge – запрос на обслуживание:

Мы можем просто нажать кнопку, а сервис с настройкой по умолчанию будет доставлен в нашу комнату.

Вот код для ServicePanel :

А вот как мы можем создать сервисную панель:

?? Теперь мы используем командный шаблон! ??

Давайте пересмотрим определение командования. Это:

  • инкапсулирует запрос в виде объекта
  • Таким образом, позволяя вам параметризовать другие объекты с разными запросами, очередями или запросами журнала и поддерживать немаловые операции.

Каждый из классов услуг, которые мы создали, Виноградная услуга , Услуги прачечной , Служба планирования поездки и Spareservationservice является примером инкапсулирования запроса в качестве объекта.

Рекомендация:

ServicePanel является примером параметризации объекта с разными запросами.

Рекомендация:

Наши просьбы были в очереди, а консьерж принимал их по телефону.

Рекомендация:

Spareservationservice Поддерживает отменить Отказ

Рекомендация:

Спасибо за прочтение!

Не забудьте подписаться.: D.

Это было первоначально опубликовано в моем блоге, Дизайн шаблонов в жизни и рубиновых Отказ

Оригинал: “https://www.freecodecamp.org/news/design-patterns-command-and-concierge-in-life-and-ruby-aab9815817ea/”