Как обновлять ui в viper


#1

Нормальной ли для VIPER является последняя строчка:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    
    switch segue.identifier! {
    case "fromLoginToMainSegueIdentifier":
        
        let dvc = ((segue.destination as! UITabBarController).viewControllers![0] as! UINavigationController).topViewController as! ViewItemsTableViewController
        
        //супер сомнительная строка
        dvc.title = self.presenter?.interactor?.getUser()?.email ?? "error occured"

Она выглядит, как будто я обращаюсь напрямую от View к Interactor. Мне кажется, выглядит фриково. Но пока ничего другого нормального не придумал.

Как лучше вообще обновлять UI в VIPER?


#2

Зачем вам вайпер, если вы во вьюконтроллере берете юзера у интерактора и передаёте строку в другой модуль?


#3

Кхм… Я только учусь, поэтому и задаю вопросы на форуме. При том, в вопросе я указал, что считаю свой пример заведомо неверным.

На мой взгляд VIPER является наиболее конкретизированным паттерном из всех, что я знаю. Этим он меня и привлек. С boilerplate’ом стерплюсь)).

VIPER - это круто! Но как передавать данные между модулями - для меня загадка. От segue’ев отказываться ой как не хочу. Я видел решение от Рамблера, где router через протокол transitionHandler обращается к view (вообще не канон) для того, чтобы тот исполнил сигвей. Выглядит удобно, но появляется business-логика в view, что рушит саму суть разделения обязанностей.

У вас есть опыт работы с VIPER? Как вы реализуете транзит данных между модулями?


#4

А вы книжку от Рамблера читали?
Я даже догадываюсь откуда у вас такая любовь к Вайперу))
Он не панацея от всего и для всего.
Для начала нужно уметь сделать на MVC, так как это наверное самая базовая архитектура в iOS. Когда вы это умеете, то уже можно и другое пробовать, и под себя немного менять. А вы хотите Вайпер и не хотите использовать его Роутер, а значит у вас будет уже не VIPER, а VIPE…


#5

Я прочитал всю книгу Рамблера (правда мой косяк, что ПОСЛЕ того, как задал вопрос :smiley: ). У них в книге еще описана работа с ModuleInput. Но она тоже выглядит каким-то костылем

(А касательно того, что вы догадываетесь, откуда у меня такая любовь к Вайперу, не понимаю, о чем вы. Я вайпер нашёл сам, если вы об этом)


#6

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

Я юзаю упрощенную версию ВИПа (без презентеров и лишних протоколов) хотя тоже не серебряная пуля. В вайпере как раз не нравятся притянутые роуты, приходиться использовать какие то костыли вместо удобных сигвеев и как следствие отпадает смысл в сторибордах, я же предпочитаю использовать все возможности что даёт платформа, тут мы с вайпером не сошлись :slight_smile: Роутинг в ВИПе можете в этом примере посмотреть.

P.S. Вообще стремлюсь к чему-то такому:


#7

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

Сейчас от VIPER всё самое важное я выудил. Работаю над созданием своей архитектуры, в которой останется только VIP (читал в одной из статей, что это было первоначальное название VIPER’a)

О сутках, проведенных над изучением VIPER’a, не жалею :smile: