констант, быстрое переключение между ними • например, URL API, token приложения. • динамические переменные между разными запросами • например, в запросе авторизации возвращается токен, который нужно передавать в каждый последующий запрос к API. 10
данных из внешних источников – API, PlistUtility, JSONUtility • обрабатывают запросы вида "дай мне содержимое этого файла" или "отправь GET запрос по этому URL с такими параметрами" • пока не покрыты тестами ! 16
• предоставляют интерфейсы для доступа к Data Source, например "Получи список избранных вакансий" • единый формат возвращаемых данных для списков, отдельных элементов и запросов с логическим результатом (успешно или нет) 18
должны отобразиться в UI • например, количество секций в таблице, количество элементов в секции, сами эти элементы • получает данные из разных фасадов и компонует их так, как нужно для отображения в UI 23
по мотивам шаблона MVVM View Controller занимается только представлением данных из View Model на экран устройства и обработкой действий пользователя 24
View Controller • обновление view model происходит по вызову метода из View • view – это делегат View Model • обновление UI происходит по вызову методов делегата View Model 25
идеи как и что можно в этом слое тестировать: • тестировать их внешний вид с помощью facebook/ios-snapshot-test-case • с помощью новых UI тестов в Xcode 7 и мока View Model тестировать что и как отображается в контроллере 29
model, фасадами, адаптерами и data source происходило с помощью completion блоков • но для эмуляции приходилось писать в 4 раза больше тестового кода • поэтому блоки были заменены на RACSignal 33
– это отдельное свойство • например, у VacancyFacade есть свойства apiAdapter и fileAdapter • в публичных интерфейсах объектов объявлены только instance методы • никаких синглтонов (на самом деле это не так) 38
разных View Model, то нет необходимости создавать много объектов этого фасада • однако для того, чтобы тестировать каждый объект в отдельности, нужно иметь возможность подменять его зависимости на моки, поэтому традиционные реализации Singleton нам не подошли 41