iOS-РАЗРАБОТКА
Разбираем шаблоны iOS-разработки на реальных примерах из жизни
На авторском курсе по iOS-разработке от Redmadrobot вы за два месяца познакомитесь с языком программирования Swift, напишете клиент-серверное приложение, научитесь взаимодействовать с северным API и бэкенд-разработкой.

Начните учиться прямо сейчас: мы перевели для вас материал про паттерны, которые упрощают жизнь iOS-разработчиков. Смотрите, как использовать их, чтобы создавать чистый и удобный в поддержке код, а также экономить время, когда нужно быстро изменить определенный функционал.
2 августа 2018
Rodrigo Cavalcante
iOS Developer
Design Pattern — самая популярная тема для разговоров, обсуждениях на форумах и даже во время перекуров на работе. Вы можете найти много интересного об этом в книгах или в интернете, везде полно примеров про резиновых уточек, кофейни и пиццерии.

Когда я начинал учиться, я понимал, что такое паттерны, но я не понимал, как применить их в моем коде. Я понимал, что Factory Method (фабричный метод) используется для создания объектов, но не понимал, зачем мне им пользоваться.

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

Алгоритму нужен объект fly, который знает, как летает class утка, а также знает, как летает class ракета. И ему совсем не важно, что используется: взмах крыла или газовый баллон.
Реализация задачи с помощью Strategy
Для этого проекта нам понадобится опыт работы с viewController, а также заранее определенная модель поведения (Strategy pattern). Идеальный пример для использования Strategy Pattern — это реализация с помощью viewController процесса авторизации (Login). Создадим протокол LoginViewController и определим его действия и зависимости.


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


Фабричный (Factory) метод
Factory Method — это паттерн, который используется для создания объектов без указания его точного класса.
Он полезен тогда, когда нужно создать объект во время выполнения программы. Например, если пользователь хочет пиццу с сыром, то будет создан объект CheesePizza(), а если он хочет пиццу с пепперони, то PepperoniPizza().
Решение задачи с помощью Factory
Ранее мы использовали поведенческий (Strategy) шаблон для авторизации с помощью viewController. Чтобы получить возможность создавать объекты во время выполнения программы и передавать все зависимости, в которых они нуждаются, мы будем использовать factory pattern.

Мы должны запушить экземпляр класса LoginViewController, который можно создать, используя разные подходы, например, с помощью storyboard, xibx или программным путем. У нас есть Factory пример, который может быть инжектирован таким образом, что объекты, которые создаются c помощью него, будут менять сам Factory.
С классом Factory нам просто нужно вызвать метод build. Нас не интересует, какой Factory метод будет запрошен: ViewCodedLoginViewControllerFactory или StoryboardLoginViewControllerFactory — нам просто нужно выполнить метод build, который вернет нам LoginViewController.
У нас получился один Factory метод, который знает, как собрать ViewController с помощью storyboard, xibx или программным путем.
Декоратор
Декоратор (Decorator) — это структурный шаблон, который позволяет динамически добавлять объектам дополнительное поведение, не влияя на поведение других объектов из этого же класса.
Это мой любимый шаблон. Классический пример — работа кофейни, где при добавлении нового ингредиента к кофе, например, взбитых сливок, необходимо рассчитать новую стоимость и получить описание состава напитка.
Решение задачи с помощью декоратора
Нам нужны различные версии API для каждого служебного вызова, это можно реализовать различными способами, но мы воспользуемся Decorator pattern для добавления пользовательского заголовка Header в шаблон Request. При таком подходе мы будем готовы, если в будущем для API вызова нужно будет добавить новый параметр в заголовок.
Нам также нужно отфильтровать результаты в запросе. Это можно сделать, создав новый метод или изменив способ работы самого запроса. Мы решили использовать Декоратор, чтобы добавить подобное поведение, так как наш сервис используется в других классах, желательно менять как можно меньше строк кода в предыдущей имплементации.
Адаптер
Адаптер (Adapter) — это структурный шаблон проектирования, который обеспечивает совместную работу классов с несовместимыми интерфейсами. Он часто используется, чтобы заставить работать существующие классы с другими без изменения их исходного кода.
Принцип работы шаблона соответствует своему названию —адаптер. Представьте, что вам нужно, чтобы ваш Nintendo 64, который использует композитный видеовыход, мог работать с вашим новым 4K-телевизором. Для этого вам понадобится Composite-HDMI адаптер.
Решение задач с помощью адаптера
Нам нужно получить последние четыре цифры модели card, а также нужна поддержка PKPPaymentPass. Другими словами, нам нужно создать адаптер, который будет поддерживать интерфейс PKPPaymentPass совместно с интерфейсом card.
Но мы также можем смешать шаблоны, чтобы сделать наш код многоразовым и поддерживаемым, например, добавив поведенческий шаблон Strategy. На самом деле нам не нужен объект card, нам нужны только его последние четыре цифры (lastNumbers). Так почему бы нам не создать интерфейс, который будет совместим с PKPaymentPass, Card и любым другим объектом, который может понадобиться нашему проекту.
Шаблоны программирования помогают создать чистый и удобный в поддержке код, а также сэкономить время, когда нужно быстро изменить определенный функционал. Поэтому решение некоторых задач становится значительно проще.

Если вы не до конца понимаете, как работают некоторые шаблоны, то вы можете прочитать следующие статьи о Strategy, Factory, Decorator, Adapter.
На авторском курсе от Redmadrobot вы освоите азы iOS-разработки за пару месяцев и начнёте писать чистый код, соответствующий современным гайдам.

Учитесь у лучших — ведущие разработчики из Redmadrobot поделятся своими best practices, техниками и инструментами.
Прокачайтесь в iOS-разработке
Понравилось? Поделитесь с друзьями