Найти в Дзене
roadToDev

Быстро о Clean Swift

Изучим основы архитектуры Clean Swift за короткое время. *Перевод статьи Kamyar Elyasi - iOS Developer Помните те дни, когда мы, iOS разработчики, проводили часы и дни, изучая MVVM? Теперь я верю, что когда-нибудь, рано или поздно, мы повсюду будем искать возможности изучать и осваивать Clean Architecture. Так почему бы нам не начать сегодня? В этой статье я расскажу вам, что такое Clean Architecture, таким образом, чтобы вы могли быстро узнать о ней много нового. Так что… Немного о Clean Swift Architecture Clean Swift (сокращенно VIP) - это чистая архитектура дяди Боба, адаптированная для проектов iOS и macOS. Архитектура VIP для написания чистого Swift кода была представлена Рэймондом Лоу. Как вы, наверное, знаете, VIP расшифровывается как View—Interactor—Presenter. Структура проекта в этой архитектуре строится вокруг scenes (сцен). Scene должна иметь следующие компоненты: Другими словами, у нас будет набор компонентов для каждой scene, которые будут работать для нашего контроллера.
Оглавление

Изучим основы архитектуры Clean Swift за короткое время.

*Перевод статьи Kamyar Elyasi - iOS Developer

Помните те дни, когда мы, iOS разработчики, проводили часы и дни, изучая MVVM? Теперь я верю, что когда-нибудь, рано или поздно, мы повсюду будем искать возможности изучать и осваивать Clean Architecture. Так почему бы нам не начать сегодня?

В этой статье я расскажу вам, что такое Clean Architecture, таким образом, чтобы вы могли быстро узнать о ней много нового.

Так что…

-2

Немного о Clean Swift Architecture

Clean Swift (сокращенно VIP) - это чистая архитектура дяди Боба, адаптированная для проектов iOS и macOS. Архитектура VIP для написания чистого Swift кода была представлена Рэймондом Лоу. Как вы, наверное, знаете, VIP расшифровывается как View—Interactor—Presenter.

Структура проекта в этой архитектуре строится вокруг scenes (сцен). Scene должна иметь следующие компоненты:

  • View Controller
  • Interactor
  • Presenter
  • Worker
  • Models
  • Router
  • Configurator(опционально)

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

-3

Жизненный цикл VIP

  1. View controller принимает пользовательское событие, создает объект запроса и отправляет его в interactor.
  2. Interactor выполняет некоторую работу с запросом, используя worker, создает объект ответа и отправляет его в presenter.
  3. Presenter форматирует данные в ответе, создает объект view model и отправляет его в view controller.
  4. View controller отображает пользователю результаты, содержащиеся в view model.

Теперь давайте рассмотрим каждый компонент глубже:

View Controller

Взаимодействует с Interactor и получает ответ обратно от Presenter.

  • Содержит views;
  • Хранит экземпляры Interactor и Router;
  • Передает действия из Views в Interactor (бизнес-логика) и принимает действия Presenter в качестве входных данных.

Interactor

Посредник между Worker и Presenter.

  • Содержит бизнес-логику у Scene.
  • Сохраняет ссылку на Presenter.
  • Запускает действия у Workers на основе входных данных (от View Controller), запускает и передает результат к Presenter.
  • Interactor никогда не должен импортировать UIKit (import UIKit).
  • Interactor также содержит два типа протоколов, таких как Router:
    1. Протокол бизнес-логики (Business Logic Protocol) - объявляет все методы Interactor-а в этом протоколе, чтобы они могли быть доступны для использования во ViewController.
    2. Протокол хранения данных (Data Store Protocol) — здесь объявлены все свойства, которые должны сохранять свое текущее состояние. Этот протокол в основном используется в Router для передачи данных между контроллерами.

Presenter

Обрабатывает данные и формирует результат от Interactor-а во ViewModel и передает его обратно во ViewController.

  • Сохраняет weak ссылку на ViewController, который являет output-ом presenter-а.
  • После того, как Interactor выдает некоторые результаты, он передает ответ Presenter-у. Затем Presenter преобразует ответ в view models, удобный для отображения, а затем передает view models обратно во ViewController для отображения пользователю.

Worker(s)

Обрабатывает все запросы и ответы API/Database.

  • Абстракция, которая обрабатывает различные скрытые операции, такие как извлечение пользователя из Core Data, загрузка фотографии профиля, разрешение пользователям ставить лайки и подписываться и т.д.
  • Должен следовать принципу единой ответственности (Single Responsibility) (в состав Interactor-а может могут входить различные Worker(s) с разными обязанностями).

Models

Храните все модели данных.

  • Несвязанные абстракции данных.
  • Содержит модели Request, Response и ViewModel.
  • Request иногда может быть пустой структурой (например, когда у нас нет никаких post-параметров или запросов к БД).
  • Каждая модель данных предназначена для создания и использования в определенном компоненте:
    Request: Создается во ViewController и используется в Interactor.
    Response: Создан в Interactor и используется в Presenter.
    ViewModel: Создается в Presenter и используется во ViewController.

Router

Заботится о переходе и передаче данных между ViewController-ми.

  • Извлекает логику навигации из ViewController.
  • Сохраняет weak ссылку на ViewController.
  • Объявляет два протокола:
    1. Протокол логики навигации (Routing Logic Protocol) — все методы, используемые для навигации, хранятся в соответствии с этим протоколом.
    2. Протокол передачи данных (Data Passing Protocol) — протокол, содержащий данные, которые необходимо передать назначенному контроллеру.(кусок кода)

Configurator

Принимает необработанный ViewController и возвращает настроенный ViewController.

  • Дополнительный компонент, который берет на себя ответственность за настройку цикла VIP, инкапсулируя создание всех экземпляров и назначая их там, где это необходимо.

Если вы читали примеры кода в этой статье, вы, возможно, заметили, что у нас есть еще один объект под названием “SceneFactory”.
SceneFactory - это не что иное, как класс, который хранит экземпляры конфигураторов сцен (scene configurators) создает сцены с их использованием.

И наконец, для файловой структуры вашего проекта вы можете следовать приведенной ниже схеме:

-4

Это были основы Clean Swift Architecture.

Источник