Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Five Stories about LiveJournal

Five Stories about LiveJournal

Some technical stories about LiveJournal application development: VIPER, code review, compound operations and so on.

Egor Tolstoy

October 08, 2016
Tweet

More Decks by Egor Tolstoy

Other Decks in Technology

Transcript

  1. EGOR TOLSTOY RAMBLER&CO
    08 Окт 2016 17:30
    Пять историй про ЖЖ
    Ответы на все животрепещущие вопросы! Причем тут
    Рамблер? API нестабильно - как с этим жить? Чем
    помогает VIPER? Uni-подожди-подожди-directional data
    flow - он тут каким боком? Как обеспечить
    концептуальную целостность в большом проекте?
    500
    2.5k @igrekde

    View Slide

  2. 2
    Продуктологи Аналитики Дизайнеры
    Разработчики QA ПМы

    View Slide

  3. 3
    Чем помогают
    налаженные
    процессы
    разработки?

    View Slide

  4. 4
    Про Rambler&Co и ЖЖ
    Смиряемся со сложным API
    Как VIPER делает жизнь проще
    Упрощаем логику лент постов
    Про концептуальную целостность

    View Slide

  5. 5
    Про Rambler&Co и ЖЖ
    Смиряемся со сложным API
    Как VIPER делает жизнь проще
    Упрощаем логику лент постов
    Про концептуальную целостность

    View Slide

  6. 6

    View Slide

  7. 7

    View Slide

  8. 8
    1999
    2005
    2007
    2013
    2014

    View Slide

  9. 9
    1999
    2005
    2007
    2013
    2014

    View Slide

  10. 10
    1999
    2005
    2007
    2013
    2014

    View Slide

  11. 11
    1999
    2005
    2007
    2013
    2014

    View Slide

  12. 12
    1999
    2005
    2007
    2013
    2014

    View Slide

  13. 13

    View Slide

  14. 14

    View Slide

  15. 15
    3957 коммитов
    2888 unit-тестов
    30 VIPER модулей
    >800 стейтов экранов
    >700 code-review

    View Slide

  16. 16
    Про Rambler&Co и ЖЖ
    Смиряемся со сложным API
    Как VIPER делает жизнь проще
    Упрощаем логику лент постов
    Про концептуальную целостность

    View Slide

  17. 17
    Бэкенд сложный

    View Slide

  18. 18
    Бэкенд не для
    мобильных

    View Slide

  19. 19
    Бэкенд не один

    View Slide

  20. 20

    journal

    tema


    {
    journal : tema
    }

    View Slide

  21. 21
    Создание
    запроса
    Подпись
    запроса
    Отправка
    в сеть
    Десери-
    ализация
    Валидация Маппинг

    View Slide

  22. 22
    Создание
    запроса
    Подпись
    запроса
    Отправка
    в сеть
    Десери-
    ализация
    Валидация Маппинг

    View Slide

  23. 23
    Создание
    запроса
    Подпись
    запроса
    Отправка
    в сеть
    Десери-
    ализация
    Валидация Маппинг
    NSOperation
    NSOperation NSOperation NSOperation NSOperation NSOperation NSOperation

    View Slide

  24. 24
    Создание
    запроса
    Подпись
    запроса
    Отправка
    в сеть
    Десери-
    ализация
    Валидация Маппинг
    NSOperation
    NSOperation
    get_post
    get_comments
    send_comment
    NSOperation
    NSOperation
    NSOperation
    NSOperation
    NSOperation
    Создание
    запроса
    Подпись
    запроса
    Отправка
    в сеть
    Десери-
    ализация
    Валидация Маппинг
    NSOperation
    NSOperation
    NSOperation
    NSOperation
    NSOperation
    NSOperation
    NSOperation
    Создание
    запроса
    Подпись
    запроса
    Отправка
    в сеть
    Десери-
    ализация
    Валидация Маппинг
    NSOperation
    NSOperation
    NSOperation
    NSOperation
    NSOperation
    NSOperation
    NSOperation

    View Slide

  25. 25
    @interface OperationConfig : NSObject
    @property DeserializerType deserializerType;
    @property MapperType mapperType;
    @end

    View Slide

  26. 26

    View Slide

  27. 27

    View Slide

  28. 28
    Создание
    запроса
    Подпись
    запроса
    Отправка
    в сеть
    Десери-
    ализация
    Валидация Маппинг
    OAuth 1.0
    OAuth 2.0

    View Slide

  29. 29
    Проектируя, учитывайте
    особенности окружения

    View Slide

  30. 30
    https://github.com/rambler-digital-solutions/
    rambler-it-ios

    View Slide

  31. 31
    Про Rambler&Co и ЖЖ
    Смиряемся со сложным API
    Как VIPER делает жизнь проще
    Упрощаем логику лент постов
    Про концептуальную целостность

    View Slide

  32. 32

    View Slide

  33. 33
    Переиспользование,
    тестируемость, простота!

    View Slide

  34. 34

    View Slide

  35. 35

    View Slide

  36. 36
    RDSTagModule

    View Slide

  37. 37
    Модуль
    ленты
    постов
    Модуль
    поиска
    Модуль
    коммента-
    риев
    Модуль
    каталога
    Сервис
    постов
    Сервис
    людей

    View Slide

  38. 38
    Экран 1 Экран 4
    Экран 2 Экран 3
    АПИ
    МЕНЕДЖЕР!!
    111

    View Slide

  39. 39
    Стандартизация -
    залог успеха

    View Slide

  40. 40
    https://github.com/rambler-digital-solutions/
    The-Book-of-VIPER

    View Slide

  41. 41
    Про Rambler&Co и ЖЖ
    Смиряемся со сложным API
    Как VIPER делает жизнь проще
    Упрощаем логику лент постов
    Про концептуальную целостность

    View Slide

  42. 42
    View Presenter Interactor
    Router
    PostService

    View Slide

  43. 43
    View Presenter Interactor
    Router
    PostService
    StrategyFactory

    View Slide

  44. 44
    View Presenter Interactor
    Router
    PostService
    StrategyFactory
    AnotherFactory

    View Slide

  45. 45
    View Presenter Interactor
    Router
    PostService
    StrategyFactory
    AnotherFactory FactoryFactory

    View Slide

  46. 46
    View Presenter Interactor
    Router
    PostService
    StrategyFactory
    AnotherFactory FactoryFactory
    MediaService
    FeedService
    TopService

    View Slide

  47. 47
    View Presenter Interactor
    Router
    PostService
    StrategyFactory
    AnotherFactory FactoryFactory
    MediaService
    FeedService
    TopService
    Helper2
    Helper1 Helper3

    View Slide

  48. 48
    View Presenter Interactor
    Router
    PostService
    StrategyFactory
    AnotherFactory FactoryFactory
    MediaService
    FeedService
    TopService
    Helper2
    Helper1 Helper3
    Router2
    Router1 Router3
    Manager
    Factory
    Manager
    Factory
    Factory
    Factory
    Helper2
    Helper1 Helper3

    View Slide

  49. 49

    View Slide

  50. 50

    View Slide

  51. 51

    View Slide

  52. 52
    ContentListModule
    MainModule

    View Slide

  53. 53
    Module PostService
    CoreData
    пишет
    читает

    View Slide

  54. 54
    Module PostService
    CoreData
    пишет
    читает
    ContentModule

    View Slide

  55. 55
    MainModule PostService
    CoreData
    пишет
    ContentModule
    уведомляет

    View Slide

  56. 56
    Не стройте сложные
    системы

    View Slide

  57. 57
    Про Rambler&Co и ЖЖ
    Смиряемся со сложным API
    Как VIPER делает жизнь проще
    Упрощаем логику лент постов
    Про концептуальную целостность

    View Slide

  58. 58
    «Мифический
    человеко-месяц»,
    Фредерик Брукс

    View Slide

  59. 59

    View Slide

  60. 60

    View Slide

  61. 61
    Presentation layer
    Service layer
    Core layer

    View Slide

  62. 62
    ]] ]] ]] ]] ]] ]]
    ]] ]] ]]
    Code
    Review
    develop branch
    feature branch

    View Slide

  63. 63

    View Slide

  64. 64
    350 review
    за 5 месяцев

    View Slide

  65. 65
    Культивируйте
    коллективное
    владение кодом

    View Slide

  66. Гибкая архитектура
    Коллективное владение кодом
    Стандартизация процессов
    https://appsto.re/ru/7Ogzbb.i

    View Slide