Автор оригинала: FreeCodeCamp Community Member.
Sihui Huang
Определение команды шаблона – это стрессовый, чтобы посмотреть. Официальное определение в том, что это:
- инкапсулирует запрос в виде объекта
- Таким образом, позволяя вам параметризовать другие объекты с разными запросами, очередями или запросами журнала и поддерживать немаловые операции.
Давайте забываем об этом на секунду и отправиться в путешествие на Гавайи.
И жить в роскошном отеле.
Мы провели день на пляже, подкуба погрузились и проделали экскурсию. Пришло время вернуться в отель, чтобы охладить, есть и планировать на следующий день.
Вернувшись в отель, мы хотим:
- Получить обслуживание номеров на ужин
- Получить услуги прачечной, потому что мы не принесли дополнительную одежду
- Получить путеводитель для Кауаи, остров, который мы собираемся завтра
Мы проверяем меню обслуживания отеля и найдите три предмета обслуживания, соответствующие нашим потребностям.
Затем мы называем стойку регистрации, чтобы разместить эти три запроса. Консьерж поднимает наш звонок, записывает наш список запросов и действует на каждый запрос на обслуживание, как указано в меню сервиса.
Затем каждый сотрудник выполняет в соответствии с каждым конкретным запросом:
- Шеф-повар на кухне начинает готовить
- Отдел уборки отправляет персонал в нашу комнату, чтобы забрать нашу одежду
- Персонал в вестибюле захватывает путеводитель и доставляет его в нашу комнату
Давайте повторим, что только что произошло.
а. Мы выбрали услуги, которые мы хотели из меню и отправили их в консьерж.
б. Консьерж написал эти сервисные запросы в виде списка.
с. После того, как мы повесили, поручено меню сервиса, консьерж отправил наши запросы на соответствующие отделы.
др. Каждый отдел выполнен по данному запросу.
Давайте посмотрим на действия в Руби.
1. Мы представили эти три запроса к консьерже:
2. Эти запросы вошли в список консьержа отслеживает:
Посмотрим, что в действии (консоль):
Как мы видим, после Мы Представил три запроса, эти запросы были в request_list заботиться о Консьерж Отказ
3. Инструктировано меню службы, консьерж отправил наши запросы на соответствующие отделы.
Код выше должен работать нормально.
Кроме одного …
Это пахнет плохой.
В частности, часть, где у нас есть случаи переключателя:
Почему эта часть пахнет плохой?
- Если отель предлагает двадцать услуг вместо трех, метод будет очень длинным.
- Мы хотим предложить новые услуги или удалить существующую услугу. Однако каждый раз, когда мы должны открыть
Консьержкласс и переопределить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/”