Паттерн Cake и введение зависимостей.

П

Есть разные способы инъекций (injection) или введений зависимостей в код. Одна из интересных концепций, с которой я познакомился буквально на днях, реализуется через паттерн Cake. Эта реализация вытекает из Scala, которая основана на концепции, что зависимости нужно вводить только через интерфейс(протокол), а не конкретный класс.

Кстати, я уже писал ранее о введении зависимостей в Singleton для избавления от Singleton-зависимости.

Итак, если Cake — это шаблон проектирования Scala, то как его реализовать в Swift? Мы сделаем это при помощи расширения протокола.

Паттерн Cake — начинаем кодить

Начнем с создания структуры, которая будет нашей моделью. Она будет содержать наши данные, которые мы будем получать:

Далее мы создадим протокол, который будет определять наш репозиторий. В этом протоколе будет метод, возвращающий нам все наши продукты:

Теперь нам понадобится какая то реализация для нашего репозитория. Мы создадим структуру ProductRepositoryImplementation, которая будет соответствовать нашему протоколу ProductRepository. В этой реализации мы просто вернем несколько каких то продуктов:

ВНИМАНИЕ! Далее начинается магия

Давайте создадим еще один протокол и назовем его ProductsRepositoryInjectable. В этом протоколе добавьте свойство типа ProductRepository и сделайте это свойство readonly (только для чтения, get). Дальше создадим расширение для протокола, которое предоставит нам реализацию по умолчанию для этого свойства. Эту реализацию, кстати, мы написали чуть раньше — ProductRepositoryImplementation.

В этот самый момент мы и сделали введение зависимостей, не используя никаких сторонних библиотек. Только чистый Swift! Почему это так круто? Теперь в любое время и в любой момент введения этого протокола, мы можем «вытеснить» реализацию, не внося изменений.

Так как же мы будем это использовать? Давайте создадим viewmodel, куда мы сможем ввести ProductsRepositoryInjectable. Внутри init мы будем использовать наше введенное свойство и в цикле выводить в Log название и стоимость каждого продукта.

Для лучшего понимания, вы можете прочесть о введении зависимостей и о паттерне Cake отдельно.

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

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

Код из урока

Поддержите ресурс blog.justDev:

Сведения об авторе

Игорь Малеваный

1 комментарий

  • Есть паттерн «сервис по требованию».
    Вот он — действительно мощный.

    А это обычный «Фасад». Но да, ему придумали новое название. Но по сравнению с 80-ыми ничего нового как не было, так, видимо, и не будет )

Instagram

Поддержите ресурс blog.justDev:

Свежие записи

Рубрики