Адаптивная архитектура VSURF для SwiftUI

SwiftUI требует особого подхода к архитектуре из-за своей динамичности и многофункциональности View. Традиционные архитектуры, такие как MVC, MVP, MVVM и VIPER, не полностью совместимы с SwiftUI из-за структурной природы View, использования State и DI через Environment. Поэтому возникла необходимость в адаптивной архитектуре, способной учесть все эти особенности.
Адаптивная архитектура VSURF для SwiftUI
Изображение носит иллюстративный характер

VSURF — это архитектура, разработанная для SwiftUI, состоящая из View, ViewState, Business Unit, Navigation Routing и Singleton Services Factory. View в VSURF является основной точкой входа. ViewState отвечает за обновление UI через State-переменные и привязку к бизнес-логике. Business Unit инкапсулирует бизнес-логику и взаимодействие с сервисами. Navigation Routing управляет навигацией в SwiftUI, а Singleton Services Factory предоставляет доступ к низкоуровневым сервисам.

В VSURF модульность достигается за счет вертикальных и горизонтальных уровней, где каждый уровень имеет свою зону ответственности и ограничения по внешним зависимостям. Это позволяет оптимизировать время сборки, улучшить тестируемость и упростить разделение задач. Компоненты View, ViewStateHolder и Unit обеспечивают связь между представлением и бизнес-логикой. ViewStateHolder преобразует бизнес-модель в данные для View и передает команды от View к Unit. Unit представляет собой сервис, взаимодействующий с сервисами и содержащий потоки данных, и отвечает за взаимодействие с моделями данных.

Реализация VSURF включает в себя использование публичной View для каждого модуля Flow. ViewGroup имеет публичный init без параметров для гибкости SwiftUI. Unit, StateHolder и View используют протоколы и Combine для взаимодействия и обновления данных. Навигация управляется через NavigationState с методами push, pop и popToRoot. Компоненты легко тестируются с помощью PreviewSnapshots и SnapshotTesting.


Новое на сайте

20065[b]СПКЯ стало СПМЯ: почему переименование болезни, затрагивающей миллионы женщин, заняло... 20064[b]Почему великая пирамида Гизы пережила все землетрясения за 4500 лет[/b] 20063[b]Генетика Homo erectus: что зубная эмаль рассказала о наших предках[/b] 20062[b]Кости в бухте эребус: что кости моряков Франклина рассказывают спустя полтора века[/b] 20061[b]Крупнейший плавучий ветрогенератор в мире: Китай испытывает установку у берегов... 20060[b]Карие глаза младенца стали индиго после лечения от COVID-19[/b] 20058[b]Почему серебряная чаша с Афиной пролежала в немецком лесу две тысячи лет?[/b] 20057[b]Дыра в атмосфере солнца: вспышка достигла пика и может зажечь полярное сияние[/b] 20056[b]Динго возрастом 950 лет: кто и зачем кормил могилу животного сотни лет?[/b] 20055[b]Томоэ гозэн: женщина-самурай, которая существовала на самом деле[/b] 20054[b]Что видели астронавты «Аполлона-12» над лунным горизонтом?[/b] 20053[b]Восковой блокнот на латыни и шёлковая туалетная бумага: кто посещал средневековый... 20052[b]Хантавирус на борту: 41 человек под наблюдением после рейса MV Hondius[/b] 20051[b]Зелёные камни в пещере Пиренеев: четыре тысячи лет медной металлургии[/b]
Ссылка