Куда попадает координатор в ситуации RxSwift + MVVM + Coordinator, если координаторы не находятся в RxSwift? - PullRequest
0 голосов
/ 21 мая 2019

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

Простейший пример: просмотр контроллера с 1 кнопкой, просмотр модели, координатор. Куда мне звонить coordinator.navigate(to: .mySection) и как? Должен ли координатор храниться в контроллере вида? Я думал, что они должны быть сохранены в модели представления, но подписка в модели представления не рекомендуется использовать.

Я не хочу чрезмерно проектировать это, но я надеюсь получить некоторую проницательную помощь.

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Ни один из элементов MVVM напрямую не обращается к Coordinators, поэтому, если вы используете преимущества шаблона Координатора Соруша, вы, вероятно, используете VIPER, но вы можете не знать об этом, что не очень важно.

В VIPER R означает Маршрутизация , что идеально соответствует определению Координаторов.

Мне бы очень хотелось предложить две вещи:

  1. Большинство Интернет-туров учат вас создавать отдельного координатора для каждого из ваших UIViewController s НО Я лично спросил об этом соруша, и он ответил: это не лучшая практика с координаторами , Поэтому я использовал только двух координаторов в своем последнем приложении и был вполне доволен результатом.
  2. Если вы хотите потратить некоторое время на VIPER, я полагаю, что ваши ViewControllers являются Представителем в вашей модели VIPER; Я видел некоторые учебники VIPER в Интернете, в которых выражается обратное.

P.S. MVVM отличный, но не масштабируемый, я скромно предлагаю взглянуть на VIPER. Вот хорошая статья , которая может оказаться полезной.

0 голосов
/ 24 мая 2019

Если вы хотите использовать координатор в качестве зависимости ваших ViewModels, проверьте эту библиотеку: Действие .

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

Если вы хотите увидеть примеры, ознакомьтесь с проектом Action GitHub или, если вы хотите увидеть в примерах приложений, в книге Ray Wenderlich RxSwift есть довольно хороший пример того, как интегрировать MVVM и Coordinators.

...