#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
OCP: Open/Closed Principle in Swift (with code examples) — SOLID Principles
Компонент должен быть открыт для расширения и закрыт для модификации.
Чем полезен OCP?
👉 Защищает от лишних переопределений и дополнительных тестирований модулей
👉 Позволяет избежать новых ошибок, а также облегчает изменения бизнес-логики приложения, поскольку расширение не приведет к изменению других модулей.
В Swift соблюдению OCP помогают протоколы.
#architecture
Компонент должен быть открыт для расширения и закрыт для модификации.
Чем полезен OCP?
👉 Защищает от лишних переопределений и дополнительных тестирований модулей
👉 Позволяет избежать новых ошибок, а также облегчает изменения бизнес-логики приложения, поскольку расширение не приведет к изменению других модулей.
В Swift соблюдению OCP помогают протоколы.
#architecture
🔥5
A New Approach to StateFul MVVM
StateFul MVVM добавляет новые сущности к MVVM - coordinator и state:
👉 Coordinator инкапсулирует логику навигации. Вместо push и present ViewController'ов друга, все в координаторе.
👉 State: Domain State Container ответственен за координацию других сущностей (например network service) для реализации бизнес логики и side effect'ов. Обычно он задает новое состояние как результат side effect'а.
Пример реализации в статье и GitHub
#architecture
StateFul MVVM добавляет новые сущности к MVVM - coordinator и state:
👉 Coordinator инкапсулирует логику навигации. Вместо push и present ViewController'ов друга, все в координаторе.
👉 State: Domain State Container ответственен за координацию других сущностей (например network service) для реализации бизнес логики и side effect'ов. Обычно он задает новое состояние как результат side effect'а.
Пример реализации в статье и GitHub
#architecture
👍2👎1🔥1
iOS Project Structure Like a Pro
В статье предлагается использовать многослойную (multi-layer) архитектуру для лучшей организованности кода, разделения обязанностей, переиспользования и тестирования. Предлагается использовать такие слои:
👉 UI. Этот слой можно реализовать с использованием MVC, MVVM или VIPER архитектур
👉 Бизнес логика. Здесь, например, могут быть валидация данных, расчеты и такие классы, как UserLoginService, CommentsService
👉 Доступ к данным. Этот слой ответственен за взаимодействие с хранилищем (база данных или API).
👉 Сервисный слой содержит в себе переиспользуемые сервисы, хелперы и расширения
При построении такой архитектуры не забывайте о принципах единственной ответственности, инверсии зависимостей и декаплинге (decoupling). Для реализации можно использовать Frameworks или Swift Package.
#architecture
В статье предлагается использовать многослойную (multi-layer) архитектуру для лучшей организованности кода, разделения обязанностей, переиспользования и тестирования. Предлагается использовать такие слои:
👉 UI. Этот слой можно реализовать с использованием MVC, MVVM или VIPER архитектур
👉 Бизнес логика. Здесь, например, могут быть валидация данных, расчеты и такие классы, как UserLoginService, CommentsService
👉 Доступ к данным. Этот слой ответственен за взаимодействие с хранилищем (база данных или API).
👉 Сервисный слой содержит в себе переиспользуемые сервисы, хелперы и расширения
При построении такой архитектуры не забывайте о принципах единственной ответственности, инверсии зависимостей и декаплинге (decoupling). Для реализации можно использовать Frameworks или Swift Package.
#architecture
👍8❤1👎1
The Coordinator Pattern: A Simple, Scalable Solution for iOS App Navigation
Координатор - паттерн, используемый для работы с навигацией и флоу. Объект координатора отвечает за навигацию и общение между экранами.
Для чего он нужен?
👉 Separation of concerns: Помогает сосредоточить обработку навигации и флоу в одном месте для упрощения понимания и поддержки.
👉 Reusability: позволяет разделять viewController'ы, облегчает их переиспользование и позволяет изменять флоу без изменений внутри модулей
👉 Scalability: проще следить за навигационным деревом, тем самым проще добавлять новые фичи и менять навигацию
👉 Координаторы могут быть соединены вместе в цепочку и создавать свою иерархию
#architecture
Координатор - паттерн, используемый для работы с навигацией и флоу. Объект координатора отвечает за навигацию и общение между экранами.
Для чего он нужен?
👉 Separation of concerns: Помогает сосредоточить обработку навигации и флоу в одном месте для упрощения понимания и поддержки.
👉 Reusability: позволяет разделять viewController'ы, облегчает их переиспользование и позволяет изменять флоу без изменений внутри модулей
👉 Scalability: проще следить за навигационным деревом, тем самым проще добавлять новые фичи и менять навигацию
👉 Координаторы могут быть соединены вместе в цепочку и создавать свою иерархию
#architecture
🔥6👎1
Эволюция архитектуры приложения Facebook для iOS
Facebook для iOS (FBiOS) — старейшая мобильная кодовая база в Meta. После многих лет изменений она не похожа на типичную кодовую базу iOS:
👉 Она полна C++, Objective-C(++) и Swift
👉 Имеет десятки динамически загружаемых библиотек (dylib) и так много классов, что их невозможно загрузить в Xcode сразу
👉 Apple SDK практически не используется в чистом виде — все было обернуто или заменено собственной абстракцией
👉 В приложении активно используется генерация кода с помощью Buck - кастомной системы сборки
👉 Без интенсивного кэширования собственной системой сборки пришлось бы провести целый рабочий день в ожидании сборки приложения
Подробнее об этапах эволюции - в статье.
#architecture
Facebook для iOS (FBiOS) — старейшая мобильная кодовая база в Meta. После многих лет изменений она не похожа на типичную кодовую базу iOS:
👉 Она полна C++, Objective-C(++) и Swift
👉 Имеет десятки динамически загружаемых библиотек (dylib) и так много классов, что их невозможно загрузить в Xcode сразу
👉 Apple SDK практически не используется в чистом виде — все было обернуто или заменено собственной абстракцией
👉 В приложении активно используется генерация кода с помощью Buck - кастомной системы сборки
👉 Без интенсивного кэширования собственной системой сборки пришлось бы провести целый рабочий день в ожидании сборки приложения
Подробнее об этапах эволюции - в статье.
#architecture
😱4👎2👍1