Остановите меня, если вы слышали это раньше, но вам следует изучить шаблоны дизайна.

Как программист, я постоянно решаю проблемы. Но, скорее всего, большинство проблем, с которыми вы сталкиваетесь, не новые.

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

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

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

OrderSummary

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

У нас есть объект, содержащий UserId, ItemId и PurchaseDate. Простой, но эффективный. Это приложение немного устарело, поэтому ваша подчиненная система взаимодействует с помощью xml, поэтому простой ApiClient может выглядеть следующим образом.

Здесь ничего новаторского. Просто простой класс, который сериализует объект и отправляет его в uri.

Новые требования

Прекрасные новости! Ваша компания растет! Требования изменились! Теперь нам нужно поддерживать ApiClient, который принимает сообщения в json.

Вы можете выбрать несколько вариантов:

1. Создайте XMLApiClient и JsonApiClient.

2. Создайте методы SendOrderSummaryXml и SendOrderSummaryJson.

3. Используйте шаблон стратегии, чтобы абстрагироваться от создания контента.

Поскольку это статья о паттерне стратегии, давайте выберем вариант №3.

Мы создаем новый интерфейс для определения контракта на создание http-контента.

Затем мы создаем два новых конкретных класса для реализации этого нового интерфейса: один для XML и один для JSON.

Затем обновите наш ApiClient, чтобы использовать этот интерфейс для создания HttpContent для сообщения.

Вы видите, что наш метод SendOrderSummary немного уменьшился. Это снимает с себя ответственность за создание содержимого XML или JSON. Теперь наш ApiClient даже не знает, какой тип контента он отправляет.

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

Выводы и размышления

Шаблон стратегии - это полезный шаблон проектирования для разделения систем. Наш ApiClient теперь может поддерживать любые новые типы контента без изменений. Просто реализуйте интерфейс IOrderSummaryBuilder с любым типом контента, который вам нужен, и все готово.

Еще одним усовершенствованием является повторное применение шаблона стратегии для синтаксического анализа тела ответа на класс C #. Создайте интерфейс под названием «IOrderSummaryResponseBuilder» с версиями Xml и Json.

Я Морган Кеньон. Я разработчик .NET, работающий в области DFW. Я считаю C # отличным языком для использования, и он также поддерживает отличную экосистему, я люблю решать сложные проблемы и хочу продолжить говорить о технологиях, которые я использую. Если вы нашли эту статью полезной или наводящей на размышления, оставьте комментарий и давайте подключимся через LinkedIn!

Github Repo