#architecture
📺 MVI в iOS-приложении (32 мин)
🗣 Разбор популярной State Machine в Android в реалиях iOS. В начале немного сложновато, но под конец на реальном примере все встает на свои места
📍 Какие существуют инструменты и фреймворки, позволяющие реализовать State Machine и их различия
📍 Модули MVI и их обязанности
📺 MVI в iOS-приложении (32 мин)
🗣 Разбор популярной State Machine в Android в реалиях iOS. В начале немного сложновато, но под конец на реальном примере все встает на свои места
📍 Какие существуют инструменты и фреймворки, позволяющие реализовать State Machine и их различия
📍 Модули MVI и их обязанности
👎3🔥2👏1
#architecture
How to modularize existing iOS projects using Swift Package (15 мин)
🗣 Потрясающая пошаговая и подробная инструкция для модуляризации имеющегося проекта в Swift Package
📍 Создание Swift Package
📍 Конфигурация поддерживающих платформ
📍 Регулирование уровней доступа к полям
How to modularize existing iOS projects using Swift Package (15 мин)
🗣 Потрясающая пошаговая и подробная инструкция для модуляризации имеющегося проекта в Swift Package
📍 Создание Swift Package
📍 Конфигурация поддерживающих платформ
📍 Регулирование уровней доступа к полям
👍4👎3
#ui #architecture
Every Screen in Your App Should Be a Scrolling View (7 мин)
🗣 Имеющая право на жизнь философия о том, что каждый экран должен быть обернут в UIScrollView
В статье помимо очевидных доводов присутствуют и те, о которых я не задумывался. Поэтому будет полезно их учесть. Жаль, в посте не предложено готовое решение, зато есть шанс придумать свое
Every Screen in Your App Should Be a Scrolling View (7 мин)
🗣 Имеющая право на жизнь философия о том, что каждый экран должен быть обернут в UIScrollView
В статье помимо очевидных доводов присутствуют и те, о которых я не задумывался. Поэтому будет полезно их учесть. Жаль, в посте не предложено готовое решение, зато есть шанс придумать свое
👍4👎2🔥2
Memento Pattern with SwiftUI
Memento - один из поведенческих дизайн паттернов банды четырёх. Какую проблему он решает?
Хранить состояния (снепшоты) объекта, чтобы иметь возможность восстановить его позднее, при этом сохранить инкапсуляцию объекта.
В паттерне есть следующие роли:
👉 Caretaker ответственен за хранение стека состояний объекта. Он держит ссылку на originator и пользуется его возможностями
👉 Originator хранит текущее состояние объекта, может создать объект и воссоздать объект по данному состоянию
👉 Memento Object - и есть сам объект, который создает Originator и ссылку на который хранит caretaker.
#architecture
Memento - один из поведенческих дизайн паттернов банды четырёх. Какую проблему он решает?
Хранить состояния (снепшоты) объекта, чтобы иметь возможность восстановить его позднее, при этом сохранить инкапсуляцию объекта.
В паттерне есть следующие роли:
👉 Caretaker ответственен за хранение стека состояний объекта. Он держит ссылку на originator и пользуется его возможностями
👉 Originator хранит текущее состояние объекта, может создать объект и воссоздать объект по данному состоянию
👉 Memento Object - и есть сам объект, который создает Originator и ссылку на который хранит caretaker.
#architecture
👍3👎2❤1
Handling multiple caches in App (4 мин)
Вариант имплементации кэширования для разных типов данных:
👉 Слой utils состоит из сущностей, которые реализуют протоколы для получения данных
👉 Assets Manager - посредник между слоем utils и хранилищами. Главной целью является сопоставление типа кэширования и хранилища
👉 На уровне Caching Layer располагаются все хранилища. Работа происходит только с сырыми данными абстрактно от типа
#architecture
Вариант имплементации кэширования для разных типов данных:
👉 Слой utils состоит из сущностей, которые реализуют протоколы для получения данных
👉 Assets Manager - посредник между слоем utils и хранилищами. Главной целью является сопоставление типа кэширования и хранилища
👉 На уровне Caching Layer располагаются все хранилища. Работа происходит только с сырыми данными абстрактно от типа
#architecture
👍2👎1🔥1
Create a Scalable SwiftUI MVVM Project
MVVM состоит из следующих компонентов:
👉 View - компонент, который отображает свойства ViewModel, а также отлавливает взаимодействия с пользователям, вызывая ViewModel
👉 View Model инкапсулирует логику, включая вызовы API, обработку событий и данных, а также хранит важные свойства
👉 Model - представление данных. Объекты, созданные из результатов вызовов API
В статье более подробно описано то, как создать настоящий проект на данной архитектуре
#architecture
MVVM состоит из следующих компонентов:
👉 View - компонент, который отображает свойства ViewModel, а также отлавливает взаимодействия с пользователям, вызывая ViewModel
👉 View Model инкапсулирует логику, включая вызовы API, обработку событий и данных, а также хранит важные свойства
👉 Model - представление данных. Объекты, созданные из результатов вызовов API
В статье более подробно описано то, как создать настоящий проект на данной архитектуре
#architecture
❤3👎1
Discover the MVVM Architecture in less than 90 seconds
Статья и видео с быстрым объяснением основной сути MVVM
#architecture
Статья и видео с быстрым объяснением основной сути MVVM
#architecture
🔥5👎1
The Problems with Singletons and Why You Should Use DI Instead (10 мин)
Основные проблемы синглтонов:
👉 Синглтоны глобальные
👉 Вы не можете кастомизировать инициализацию
👉 Невозможно подменить зависимости
Подробнее о проблемах и способах решения в статье
#architecture
Основные проблемы синглтонов:
👉 Синглтоны глобальные
👉 Вы не можете кастомизировать инициализацию
👉 Невозможно подменить зависимости
Подробнее о проблемах и способах решения в статье
#architecture
👍3
Исключения из принципа YAGNI
👉 Всё, что относится к правилу «ноль, один, бесконечность». Если в требованиях пункт «нам нужно сохранять адрес пользователя» превращается в «нам нужно сохранять два адреса», скорее всего лучше сразу обеспечить возможность сохранять много адресов
👉 Управление версиями. Не помешает заранее задуматься о том, как, допустим, система клиент – сервер будет распознавать разные версии и реагировать на них
👉 Логирование. Особенно в тех случаях, когда баги устраняются постфактум или в сложновоспроизводимых ситуациях
👉 Временные метки. Например, время создания или перехода в какое-либо состояние
👉 Реляционные базы данных. Большая часть данных реляционна по своей природе, поэтому нереляционная база – плохой выбор по умолчанию практически для любого приложения
#architecture
👉 Всё, что относится к правилу «ноль, один, бесконечность». Если в требованиях пункт «нам нужно сохранять адрес пользователя» превращается в «нам нужно сохранять два адреса», скорее всего лучше сразу обеспечить возможность сохранять много адресов
👉 Управление версиями. Не помешает заранее задуматься о том, как, допустим, система клиент – сервер будет распознавать разные версии и реагировать на них
👉 Логирование. Особенно в тех случаях, когда баги устраняются постфактум или в сложновоспроизводимых ситуациях
👉 Временные метки. Например, время создания или перехода в какое-либо состояние
👉 Реляционные базы данных. Большая часть данных реляционна по своей природе, поэтому нереляционная база – плохой выбор по умолчанию практически для любого приложения
#architecture
👍3👎2
Protocol Oriented Programming in Swift (4 мин)
Плюсы использования протоколов:
👉 Типы могут соответствовать и получать поведение по умолчанию от более, чем одного протокола (в отличие от наследования)
👉 Протоколам могут соответствовать классы, структуры и перечисления, в то время как наследоваться могут только классы
👉 Протоколы позволяют реализовать retroactive modeling благодаря расширениям
Когда они полезны?
👉 Для написания юнит тестов. Вы можете с лёгкостью подменить реализацию
👉 Протоколы позволяют скрыть типы пользовательских сценариев от view controller'ов, либо от любых других объектов
#architecture
Плюсы использования протоколов:
👉 Типы могут соответствовать и получать поведение по умолчанию от более, чем одного протокола (в отличие от наследования)
👉 Протоколам могут соответствовать классы, структуры и перечисления, в то время как наследоваться могут только классы
👉 Протоколы позволяют реализовать retroactive modeling благодаря расширениям
Когда они полезны?
👉 Для написания юнит тестов. Вы можете с лёгкостью подменить реализацию
👉 Протоколы позволяют скрыть типы пользовательских сценариев от view controller'ов, либо от любых других объектов
#architecture
🔥4👎3