Маршрутизация в чистой архитектуре - PullRequest
2 голосов
/ 13 июня 2019

Я использую чистую архитектуру в Swift. Я сомневаюсь о маршрутизации в нем.

Рассмотрим этот сценарий: экран нужно нажимать при нажатии кнопки в ViewController

Теперь может быть два случая:

  1. Нам нужно передать некоторые данные другому контроллеру:
    • В этом случае мы будем называть интерактор-> презентатор-> viewcontroller-> маршрутизатор-> push.
  2. Нам не нужно передавать какие-либо данные другому контроллеру вместо прохождения всего цикла:
    • Можем ли мы напрямую вызвать метод маршрутизатора из контроллера представления? Это нарушит Чистую Архитектуру?

Ответы [ 2 ]

1 голос
/ 13 июня 2019

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

Имеется интерактор для преобразования входных / выходных данныхот уровня сущности до презентаторов, что делает презентатора независимым от состояния системы, инкапсулированным в уровне сущностей и, следовательно, более тестируемым.Это делает его пригодным для распространения битов данных, специфичных для объекта, в маршрутизатор, который затем направляет его в новый стек представителя-презентатора-интерактора.

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

Однако, что не является нормальнымдолжно иметь прямое распространение события от представления (UIViewController в вашем случае) к маршрутизатору по той причине, что это создает прямую привязку сценария навигации, и просто нет возможности вставить бизнес-логику оппортунистически, потому что презентатор не участвуетв транзакции.

Итак, я хотел бы заявить, что да, он сломается Clean.Распространение на маршрутизатор либо от докладчика, либо от интерактора.Это распространяется даже на случаи, когда событие может быть представлено как Void Swift значение пустого кортежа, следовательно, распространение буквально никаких данных вообще.

0 голосов
/ 14 июня 2019

Вы не должны вызывать маршрутизатор напрямую из ViewController.

Ответственность за принятие решения о переходе в какое-либо место берет на себя интерактор. Это чистая бизнес-логика.

ViewController не должен знать, когда перемещаться. ViewController сообщает интерактору: «кнопка была нажата», затем интерактор сообщает докладчику «Эта сцена должна быть представлена», и, наконец, докладчик должен сказать ViewController, что он должен показать ту сцену, которая вызывает маршрутизатор для выполнения навигации.

...