Мастер PHP | Практические аспекты шаблона адаптера

  1. Что такое шаблон адаптера?
  2. Понимание реализации шаблона адаптера
  3. Кто разрабатывает класс адаптера?
  4. Шаблон адаптера - неправильный путь
  5. Шаблон адаптера - правильный путь
  6. Резюме

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

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

Что такое шаблон адаптера?

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

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

Приложение телефона и электронной почты действуют как отдельные компоненты, которые подключаются через Интернет

Теперь предположим, что мы путешествуем в место, где интернет-соединение недоступно для телефона. Как нам получить доступ к электронной почте в этой ситуации? Нам нужен адаптер, который соединяет наш мобильный телефон с приложением электронной почты. Давайте посмотрим на функции, ожидаемые от такого адаптера:

  • Включите интернет-соединение между мобильным телефоном и почтовым приложением.
  • Доступ к API электронной почты для отправки электронной почты.

Учитывая требования, мы можем выбрать IFTTT в качестве адаптера. IFTTT - это сервис, который поддерживает автоматизацию задач с помощью популярных API. Таким образом, мы можем использовать IFTTT в качестве адаптера, как показано на рисунке ниже.

В этом решении мы отправляем SMS-сообщение в службу IFTTT, содержащее текст сообщения. Для отправки SMS на международный номер не требуется подключение к Интернету. Затем служба IFTTT получает содержимое сообщения и инициализирует рецепт (рецепты должны быть предварительно настроены), чтобы отправить электронное письмо с помощью API почтового приложения.

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

Я думаю, что к настоящему времени у вас должно быть четкое понимание функциональности шаблона адаптера в реальном мире. Прежде чем мы перейдем к реализации, давайте посмотрим на определение шаблона как предоставлено Википедией :

В компьютерном программировании шаблон адаптера является шаблоном проектирования, который переводит один интерфейс для класса в совместимый интерфейс. Адаптер позволяет классам работать вместе, что обычно невозможно из-за несовместимых интерфейсов, предоставляя его интерфейс клиентам при использовании исходного интерфейса ,

Понимание реализации шаблона адаптера

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

<? php interface EmailSubscribe {public function subscribe ($ email); публичная функция отписаться ($ email); публичная функция sendUpdates (); }

Разработчики и поставщики услуг электронной почты могут реализовать этот интерфейс для предоставления классов подписки электронной почты для каждого из поставщиков электронной почты, таких как Feedburner, Mailchimp и т. Д. Следующий код содержит пример реализации для одной службы и инициализации метода sendUpdates ().

<? php class FeedburnerEmail реализует EmailSubscribe {публичная функция подписки ($ email) {} публичная функция отписаться ($ email) {} публичная функция sendUpdates () {// Получить доступных подписчиков // Получить обновления сайта // Отправить электронную почту}} $ feedburner_email = новый FeedburnerEmail (); $ Feedburner_email-> sendUpdates ();

Теперь предположим, что Feedburner решает изменить свою библиотеку на последнюю версию.

<? php class FeedburnerEmailVersion2 {открытая функция subscribe ($ email) {} открытая функция unsubscribe ($ email) {} открытая функция getSubscribeers () {// Возврат подписчиков} открытая функция sendEmails ($ подписчики) {// Получить обновления сайта // Send Emails echo "электронные письма, отправленные сегодня"; }} $ feedburner_email = new FeedburnerEmailVersion2 (); $ подписчики = $ feedburner_email-> getSubscribeers (); $ Feedburner_email-> sendEmails ($ абонентов);

Согласно предыдущему коду, добавляются новые методы, а существующая функциональность изменяется в новой версии библиотеки. Код инициализации изменился, и последняя версия Feedburner стала несовместимой с интерфейсом EmailSubscribe.

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

<? php class FeedburnerAdapter реализует EmailSubscribe {public function subscribe ($ email) {} public function unsubscribe ($ email) {} public function sendUpdates () {$ feedburner = new FeedburnerEmailVersion2 (); $ подписчики = $ feedburner-> getSubscribeers (); $ Feedburner-> sendEmails ($ абонентов); }} $ feedburner_email = new FeedburnerAdapter (); $ Feedburner_email-> sendUpdates ();

Адаптер FeedburnerAdapter инициализирует библиотеку электронной почты Feedburner в своем методе sendUpdates () и восстанавливает предыдущую реализацию, вызывая новые методы в последней версии библиотеки. Теперь наше приложение и библиотека Feedburner взаимодействуют через стандартный интерфейс FeedburnerAdapter. Наше приложение не знает, что реализация изменилась, и вместо исходного библиотечного класса работает адаптер. Разработчики могут вызывать стандартный набор методов, не внося никаких изменений в свой исходный код.

Теперь пришло время понять теоретические аспекты паттерна Adapter, используя его диаграмму классов.

Обычно в нашем приложении есть Client, Target и Adaptee, а класс Adaptee реализует интерфейс Target. В ситуациях, когда Client и Adaptee становятся несовместимыми, мы создаем новый класс с именем Adapter и помещаем его между Target и Adaptee для обеспечения совместимости компонентов друг с другом.

Диаграмма выше содержит оригинальный дизайн шаблона Adapter для использования в лучших сценариях. Интерфейсы не используются широко в проектах PHP, но это не означает, что вы не можете использовать шаблон адаптера. Пока некоторый компонент объединяет несовместимые интерфейсы, его можно считать адаптером.

В моем последняя статья на Opauth мы обсудили использование класса стратегии в библиотеке Opauth. Он также действует как адаптер, даже если он не реализует никаких интерфейсов. Адаптер стратегии сделал открытые библиотеки аутентификации совместимыми с базовой библиотекой Opauth.

Кто разрабатывает класс адаптера?

Когда нам нужен адаптер, мы можем создать его как разработчика или попросить поставщика предоставить адаптер. Это зависит от ситуации и типа проекта, над которым мы работаем. Если мы разрабатываем приложения с использованием распространенных сторонних библиотек, мы будем нести ответственность за создание адаптеров, отвечающих требованиям. С другой стороны, мы могли бы разрабатывать крупномасштабное приложение и ожидать, что производители разработают библиотеки специально для нашего приложения. В таких случаях, если поставщики изменяют свою библиотеку, они также должны предоставить Адаптер.

Шаблон адаптера - неправильный путь

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

Предположим, что две команды были назначены для разработки классов Feedburner и Mailchimp по отдельности на основе исходного интерфейса, который мы использовали ранее.

<? php класс FeedburnerEmail реализует EmailSubscribe {публичная функция подписки ($ email) {} публичная функция отписаться ($ email) {} публичная функция getSubscribeers () {// возвращает список подписчиков} публичная функция sendUpdates () {$ this-> getSubscribeers (); // Получение обновлений веб-сайта // Отправка электронной почты}} <? Php class MailchimpEmail реализует EmailSubscribe {public $ подписчиков; публичная функция подписки ($ email) {} публичная функция отписки ($ email) {} публичная функция getSubscribeers () {$ this-> подписчики = "Список подписчиков"; } публичная функция sendUpdates () {$ подписчики = $ это-> подписчики; // Получаем обновления сайта // Отправляем электронные письма}}

Хотя оба класса совместимы с целевым интерфейсом, между клиентом и этими двумя классами существует несовместимость. Рассмотрим код инициализации, чтобы лучше это понять:

<? php $ email = FeedburnerEmail (); $ Email-> sendUpdates (); $ email = MailchimpEmail (); $ Email-> getSubscribers (); $ Email-> sendUpdates ();

Код из Team 2 не совпадает с кодом инициализации клиента и, следовательно, становится несовместимым. Нам нужен адаптер, чтобы исправить проблему для класса Mailchimp. Это считается неправильным использованием шаблона адаптера, поскольку мы могли бы спланировать интерфейс должным образом, чтобы избежать таких проблем несовместимости.

Шаблон адаптера - правильный путь

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

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

Следующий код содержит библиотеку Twitter для этой реализации.

<? php class TwitterService {public function authenticate ($ username) {} публичная функция deauthenticate ($ username) {} публичная функция tweet ($ message, $ user) {// Обновление стены новым твитом} публичная функция getUpdates () {/ / Return Updates} публичная функция getFollowers () {// Возврат подписчиков}}

Мы не можем сделать TwitterService совместимым с целевым интерфейсом или клиентом с его оригинальной реализацией. Но мы можем видеть, что логика класса похожа на EmailSubscription. Следовательно, в этой ситуации мы можем эффективно использовать класс адаптера, чтобы сделать TwitterService совместимым с клиентом без изменения клиентского кода.

Давайте посмотрим на реализацию класса TwitterAdapter.

<? php class В TwitterAdapter реализована функция EmailSubscribe {public function subscribe ($ username) {} public function unsubscribe ($ username) {} public function sendUpdates () {$ tw_service = new TwitterService (); $ updates = $ tw_service-> getUpdates (); $ подписчики = $ tw_service-> getFollowers (); $ tw_service-> Tweet ($ обновления, $ абонентов); }} $ twitter_subscribe = new TwitterAdapter (); $ Twitter_subscribe-> sendUpdates ();

Класс TwitterAdapter реализует наш целевой интерфейс с оригинальными функциями, связанными с подпиской на электронную почту. Внутренне он создает объект TwitterService и делает функцию твита совместимой с sendUpdates (), вызывая необходимые функции и возвращая выходные данные, ожидаемые клиентом.

Код инициализации кажется похожим на предыдущий код. Поэтому клиентский класс не знает, что сервис Twitter отправляет твит вместо обновлений по электронной почте. Класс клиента продолжает вызывать метод sendUpdate () для всех сервисов, и соответствующие методы обновления будут выполняться через адаптеры.

Резюме

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

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

Изображение через Fotolia

Похожие

Как настроить среду разработки Python в Windows
Это руководство предназначено для пользователей Windows, которые хотят настроить свой компьютер для разработки с Python. Что такое Python? питон это язык программирования, который легко выучить, но при этом мощный и гибкий. Многие профессиональные разработчики программного обеспечения используют Python каждый день для выполнения своей работы, как для крупных проектов, так и для небольших. Python является бесплатным, с открытым исходным кодом,
Недостаточно просто хотеть. Какова мотивация, чтобы похудеть? • Блог Диеты OXY365
Эти вопросы звучат знакомо? Наизусть вы также знаете самые популярные, мотивационные советы в стиле «просто хотите» или «хотите иметь возможность», которые должны быть универсально применимы даже в отношении потери веса. Вы пытались обратиться к ним, но в конечном итоге это подорвало вашу веру в свои способности и понизило самооценку, когда вы через некоторое время отпустили. Но вы видите, что другие преуспевают и задаются вопросом, в чем секрет их успеха? Вы приходите к выводу, что
Лабораторные испытания: разветвления дополнительной памяти на Mac
Это происходит с каждым Mac (и любым другим типом ПК): система замедляется, когда она делает много вещей одновременно. Если это случится с вашим Mac больше, чем вы хотели бы, вашей системе может потребоваться больше оперативной памяти. Добавление большего объема оперативной памяти на ваш Mac - если вы можете добавить больше оперативной памяти - это один из самых простых способов улучшить производительность вашего Mac. Важнейший вопрос: сколько оперативной памяти вам на самом
Основы браузера Brave - что он делает, чем он отличается от конкурентов
... путь, а не более простая модель полного исключения рекламы, потому что, хотя немногие пользователи наслаждаются рекламой, многие понимают, что без них коммерческая сеть в ее нынешнем виде была бы почти невозможна. Вот почему, заявил Брэйв, он не только сделает обмен рекламой - свою рекламу для тех, которые первоначально отображались на сайте - но и создаст денежную систему, которая в конечном итоге будет компенсировать те же самые сайты. Это определенно ориентированная на пользователя
Clickbait - что это? Сейчас объясняю
Это тенденция в польском интернете, а именно пользователи Интернета заново открыли слово «кликбэйт». Слово «клик-приманка» как термин для практики онлайн-порталов функционирует в космосе в течение длительного времени, но лишь недавно оно стало предметом массового автоэротизма, комментирующего практически в каждом месте сети. Мое чувство паука обычно не разочаровывает меня, но, чтобы быть уверенным, что я проверил и согласился, очевидно, что-то уместно.
Как создавать реалистичные текстовые сообщения на экране
За последние несколько лет зрители воспринимали на экране текстовые сообщения, которые всплывали над кадром персонажа, держащего телефон. Прежде чем сообщения стали появляться на экране в одиночку, создатели фильма рассчитывали показать кадры телефона . Техника была громоздкой и визуально не интересной. Прежде чем идти дальше, вот отличный взгляд на историю текстового сообщения на экране от
Дешевый строящийся дом или квартира от застройщика?
Многие люди сталкиваются с дилеммой: выбрать строящийся дешевый дом или купить квартиру у застройщика. Конечно, оба варианта имеют свои плюсы и минусы. Стоимость строительства дома зависит от многих факторов. Однако, как правило, с сопоставимой площадью, это более дешевый вариант. Главный вопрос, есть ли у нас так много времени, чтобы с этим столкнуться. Как снизить стоимость строительства дома?
Что использовать для стайлинга React?
... шаблонам. Они дают предложения о том, как назвать файлы и классы. Пример методологии: БЭМ BEM предлагает использовать определенный формат для имен классов: «блок, элемент, модификатор». БЭМ предлагает никогда не использовать вложенные селекторы. , форма. кнопка {background -color: blue; } form__button {background -color: blue; } Препроцессоры CSS - это инструменты, которые используют
Криптовалютный эфир взлетел на 9% после того, как чиновник SEC заявил, что это не безопасность
Вторая по величине криптовалюта в мире выросла в четверг после ключевого чиновника Комиссии по ценным бумагам и биржам дал понять что в глазах агентства это не безопасность. Цифровая валюта эфир вырос на 8,8 процента до максимума в 520,68 доллара, сообщает CoinDesk. Его цена боролась
Youtube Music и YouTube Premium прибывают в Италию. Что они и как они работают
Музыка Youtube прибыла в Италию. Мы находимся перед сервисом потоковой передачи музыки, который Google предлагает в качестве альтернативы Spotify и Apple Music, но одно отличие очевидно: есть также видео и контент, который можно найти только на Youtube, например, ремиксы, выступления. жить и чехлы. Сегодня многие люди слушают музыку на Youtube, но приложение и смартфон должны оставаться активными, чтобы разрешить воспроизведение: появление Youtube Music превратит приложение
КАК ПОДПИСАТЬ ВЕЩИ РЕБЕНКА ДЛЯ ДОШКОЛЬНИКА И ЧТО?
Как подписать вещи вашего ребенка в детский сад, детскую кроватку или школу? Многие родители уже нашли ответ на этот сложный вопрос. В конце концов, сентябрь давно закончился. Однако сегодня я хотел бы представить вам интересное и совершенно инновационное решение, которое наверняка оценят многие родители, потому что у него много применений, но это момент. Подписание вещей ребенка часто является необходимостью для родителей , и это обязательное требование, которым ребенок

Комментарии

Потому что кто сказал, что ты должен сдуть только один раз?
Потому что кто сказал, что ты должен сдуть только один раз? Так что время уникальное, единственное в своем роде, и о нем стоит помнить. Мы рекомендуем закрыть воспоминания в книге. Во-первых. На день рождения! Наша персонализированная книга - подарок к первому дню рождения Яши (напечатан
Что такое Python?
Что такое Python? питон это язык программирования, который легко выучить, но при этом мощный и гибкий. Многие профессиональные разработчики программного обеспечения используют Python каждый день для выполнения своей работы, как для крупных проектов, так и для небольших. Python является бесплатным, с открытым исходным кодом, и работает на Windows, Mac и Linux, а также на многих других операционных системах. Это отличный язык, если вы хотите начать учиться
Что такое вспышка невидимого текста (FOIT)?
Что такое вспышка невидимого текста (FOIT)? Наиболее распространенный способ использования настраиваемого веб-шрифта - указать шрифты, используемые в объявлении CSS @ font-face, и оставить браузер по умолчанию. Это не идеально. Поскольку информация о шрифтах находится в CSS, браузеры по умолчанию откладывают загрузку шрифтов до тех пор, пока CSS не будет проанализирован. Это не все. Как Зак Кожевник совершенно ясно
Что такое Cheat Engine?
Что такое Cheat Engine? Cheat Engine для Android - одно из лучших приложений для андроид для рутованных устройств, которые позволяют взламывать игры. Технически, это может работать и для нерутированных устройств, но поскольку игры блокируют файлы, для их изменения необходим root-доступ. Вы можете скачать Cheat engine apk по ссылке ниже. Скачать Cheat Engine .APK Взгляд на чит-движок для Android.
Что такое тощий пакет?
Что такое тощий пакет? Это похоже на то, как если бы вы поставили свою кабельную подписку на диету. Они отключили несколько сотен каналов, которые вы никогда не будете смотреть, и вместо этого вы получите ~ 50 каналов, включая местных жителей, региональные спортивные сети и некоторые из лучших кабельных каналов. Здесь нет ежегодных обязательств и вводного курса (так что ваша цена не будет магически удваиваться в следующем году). Как мы выбрали
Скажи пару слов о себе - что ты делаешь, что ты делаешь?
Скажи пару слов о себе - что ты делаешь, что ты делаешь? Сначала я начну с одного « Привет! Да, ты за монитором! Поздравляем с выбором сайта, который вы сделали! " Самое неприятное - это писать (рассказывать) о себе. Я верю, что один человек - то, что другие видят в этом. Некоторые говорят, что я один из лучших профессионалов в сфере SEO / SEM в Болгарии. Я думаю, что другие ненавистники - бессердечный, недобросовестный
Что такое страница высокого качества?
Что такое страница высокого качества? Это визуально привлекательно и в то же время очень полезно; Имеет ценную информацию и дает ответы на потребности клиента; Это внушает доверие клиента и генерирует «продажи»; Он технически совершенен, безопасен и оптимизирован. Как вы получаете качественный сайт? Прежде всего, работа с опытными специалистами; Проверьте портфолио подрядчика, его рекомендации
Что такое OneDrive?
Что такое OneDrive? OneDrive - это сервис, предлагающий онлайн-хранилище, которое можно использовать для хранения документов, заметок, фотографий, музыки, фильмов и других файлов. С OneDrive вы можете получать доступ к файлам и делиться ими с любого устройства. Все пользователи OneDrive получают 15 ГБ дискового пространства бесплатно. Клиенты с активными подписками Office 365 Personal также получают 1 ТБ дискового пространства. Доступны ли мои документы, хранящиеся на OneDrive, также в автономном
Что именно мотивация?
Что именно мотивация? Больше чем вдохновляющие лозунги повторять себя каждое утро и вечер. Вешать фотографии красивых тел на холодильник тоже нет - это всего лишь маленький элемент из огромной головоломки, которая является мотивацией. Чтобы быть эффективно мотивированным, чтобы похудеть, нужно подходить к предмету целостно, то есть целостно. Представьте, что вы создаете головоломку. Чтобы изображение стало единым целым, все элементы должны быть
Что такое ОЗУ?
Что такое ОЗУ? Оперативное запоминающее устройство - это временный носитель, который ЦП вашего Mac использует для быстрого доступа к данным, которые он обрабатывает. Процессор может получать доступ к данным, содержащимся в оперативной памяти, гораздо быстрее, чем к данным, хранящимся на устройствах длительного хранения, таких как традиционные жесткие диски и даже твердотельные накопители.
Что такое Храбрый браузер?
Что такое Храбрый браузер? Brave - это более или менее стандартный браузер, который позволяет пользователям переходить на веб-сайты, запускать веб-приложения и отображать или воспроизводить онлайн-контент. Как и другие браузеры, она бесплатна для загрузки и использования, запоминает информацию об аутентификации сайта и может блокировать показ онлайн-рекламы на сайтах. Его производитель, Brave Software, является относительно новой записью в битвах за браузер, впервые представив

Что такое шаблон адаптера?
Что такое шаблон адаптера?
Как нам получить доступ к электронной почте в этой ситуации?
Lt;?
Lt;?
Lt;?
Lt;?
Кто разрабатывает класс адаптера?
Lt;?
Lt;?