company_banner

По итогам Rambler.iOS V



    Во вторник состоялся Rambler.iOS V, который мы анонсировали на Хабре ранее. Эксперимент с разбитием одной очень крупной темы на восемь связанных между собой докладов отлично состоялся — благодаря такой гранулированности докладчики смогли сосредоточиться именно на своем аспекте VIPER и подготовить действительно мощные выступления.


    Для тех, кому лень читать: Плейлист выступлений.

    1. Вступление, в котором Егор Толстой рассказывает о том, почему Rambler&Co и почему VIPER.
    Видео



    2. VIPER a la RamblerСергей Крапивенский рассказал о том, что случилось с когда-то простой и стройной архитектурой после того, как ее пропустили через блендер из наших разработчиков. На самом деле, случилось только хорошее.
    Слайды
    Видео

    3. Кодогенерация и Генерамба - Егор Толстой рассказал о наших страданиях, 10 минутах на создание модуля, секретаршах и кодогенераторе, разработанном в Rambler&Co.
    Слайды
    Видео

    4. Переходы между модулямиАндрей Зарембо затронул больную для многих тему использования UIKit в рамках VIPER, в частности — UIStoryboardSegue для переходов между модулями. Если вы испытывали проблемы при передаче данных от одного экрана другому, связывали роутеры друг с другом или использовали для этого синглтон — это выступление точно для вас.
    Слайды
    Видео



    5. Сложные модулиВадим Смаль рассказал о том, как правильно декомпозировать экран на множество подмодулей, типах их связи, достоинствах и недостатках. Модули-вьюшки в модулях-ячейках в модуле-таблице в модуле-контейнере? Да легко!
    Слайды
    Видео

    6. Разбиваем Massive View ControllerАлександр Сычев показал на своем опыте, что VIPER подходит не только для написания новых приложений, но и является отличным инструментом при рефакторинге тех самых контроллеров, которые пишут все, но молчат об этом. Отдельное внимание стоит уделить окончанию выступления — Саша привёл статистику некоторых из наших проектов по количеству строк кода, VIPER-модулей, и сравнивает результаты до и после рефакторинга.
    Слайды
    Видео

    7. Тестирование VIPERСтас Цыганов рассказал, как методология TDD ложится на написание нового модуля, показал всем свои IBOutlet'ы и IBAction'ы, в деталях описал подходы к тестированию каждого из элементов VIPER'а. Помимо непосредственно тестирования, доклад объясняет причины некоторых из наших решений, о которых рассказывали другие выступающие.
    Слайды
    Видео

    8. VIPER и SwiftВалерий Попов, главный адепт Swift'а в нашей команде, рассказал о том, что меняется в архитектуре модуля с переходом на другой язык. Строение модуля, DI, тестирование, организация переходов — и все без единой квадратной скобочки.
    Слайды
    Видео

    9. Секция вопросов и ответов — после просмотра восьми докладов у зрителей появилось большое количество интересных вопросов. Ребята из нашей команды ответили на то, сколько стоит ввести нового разработчика на проект, как новый подход к архитектуре влияет на точность выставления сроков, рассказали об аспектах использования NSFetchedResultsController на уровне интерактора — и рассказали много других клевых штук, которые не вошли в предыдущие выступления.
    Видео

    Прошедшая конференция — не единственный наш вклад в популяризацию VIPER:


    Ждите следующий Rambler.iOS в новом году!
    Rambler Group
    86,92
    Компания
    Поделиться публикацией

    Похожие публикации

    Комментарии 2

      0
      Я пытаюсь разобраться с тем как реализована передача данных из одного модуля в другой. Представим, что у нас есть два модуля: ItemList (UITableViewController со списком сущностей типа ItemEntity) и ItemForm (UIViewController, где можно отредактировать поля выбранного ItemEntity).
      1. Пользователь тыкает по строчке с Item
      2. tableView сообщает своему Presenter, что didSelectItemAtIndexPath
      3. Presenter сообщает своему Router, что надо открыть форму ItemFormViewController (withSegueIdentifier: «to item form»)
      4. по слайдам — у Router-а, есть ссылка на TransitionHandler, у которого есть метод openModule(segueIdentifier: String, block: (..) -> Void); этот метод ретранслируется в performSegue;
      5. А вот тут начинаются трудности…

      Во-первых, не понятно какой должен быть параметр у block: (… тут..) -> Void. Т.к. ожидаемо, что это будет ModuleBInputProtocol. Но мы тут как бы не должны завязываться на модуль B (мы же хотим, чтоб этот метод открывал и другие модули, или нет?). Можно сделать во ViewController такое:
      func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject?) {
        if segueIdentifier == "to item form" {
          let configHolder = segue.destinationViewController as! ModuleBConfigurationHolder
          let input = configHolder.moduleInput as! ModuleBInputProtocol
          let configBlock = sender as! ((input: BaseModuleInput) -> Void)
          configBlock(input)
        } else if segueIdentifier == "to next page" {
          .. то же самое что и выше, только другой модуль ..
        } ..
      }
      


      Но это ж бред…

      Т.е. по картинкам и слайдам кажется, что понятно, но когда пытаюсь реализовать (на swift-е), получается *** какая то.
        +1
        Не знаю правильно ли я все понял… но, в целом, описанная выше методология, оказалась в разы удобней, чем один роутер на все приложение. И передача параметров и все остальное.

        Спасибо за доклады! На много лучше начал понимать КАК надо делать VIPER.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое