Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Homework 005, Dependency Injection by Controlling the World (inspired by Point-Free) #15

Open
igorkravchenko opened this issue Dec 7, 2019 · 1 comment
Assignees

Comments

@igorkravchenko
Copy link
Contributor

igorkravchenko commented Dec 7, 2019

Задание 1

  1. Клоним плейграунд и копируем код из него в новый iOS проект под названием MARepos.
  2. Приложение должно отображать navigation controller с MA репозиториями, установленного в качестве root view controller-а в window.
    Создаем новый target с типом iOS Framework и называем его MAReposFramework.
  3. Перемещаем весь код нашего приложения (кроме AppDelegate и/или SceneDelegate) в MAReposFramework.
  4. Нужно убедиться что все исходники принадлежат target-у MAReposFramework, а не target-у приложения.
  5. Необходимо чтобы MAReposFramework был импортипрован в AppDelegate и/или SceneDelegate приложения MARepos чтобы иметь доступ к ReposViewController для создания инстанса ReposViewController.
  6. Собираем приложение и убеждаемся, что все работает так же, как и прежде (нужно будет сделать некоторые типы и функции публичными)
  7. Создаем iOS playground и перетаскиваем его в проект приложения.
  8. Импортируем MAReposFramework, создаем экземпляр ReposViewController и устанавливаем его как live view playground-а.
  9. Можно использовать исходный код playground-а в качестве примера.
  10. Подменяем Current: live заменяем mock вариантом (нужно объявить статические свойства live и mock для Environment)
  11. Теперь страница playground-а может выступать live примером этого экрана.
    Меняем mock чтобы протестировать разные состояния, чтобы изменения вступили нужно пересобрать MAReposFramework

Задание 2

В приложении есть еще несколько зависимостей которые мы не затронули.
Давайте исследуем как их взять под контроль выполнив несколько упражнений:

  1. Клиент аналитики использует несколько синглетонов: Bundle.main, UIScreen.main и UIDevice.current. Извлекаем эти зависимости в Environment. Какие есть преимущества контроля этих зависимостей?
  2. DateComponentsFormatter может производить разные строки для разных языков и локалей, и по умолчанию в нем установлена локаль устройства.
  • Извлекаем эту зависимость в Environment и управляем ею в форматировщике
  • Приводим несколько примеров того как mock-и Current-а позволяют нам тестировать форматирование для разных языков и локалей.

 Примечание Evironment это то же, что и World упоминаемый в лекции.

@MSavisko
Copy link
Contributor

#14 andrey.strib_stribandrey

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants