Ответ
Архитектурные паттерны:
- MVC (Model-View-Controller): Базовый паттерн в UIKit.
UIViewControllerчасто выступает как массивный контроллер, объединяя логику представления и бизнес-логику. - MVVM (Model-View-ViewModel): Применял для разделения ответственности, особенно в связке с реактивными фреймворками (Combine) или SwiftUI. ViewModel преобразует данные модели для представления.
// Простой пример ViewModel с Combine class UserListViewModel { @Published var users: [User] = [] func loadUsers() { /* Загрузка данных */ } } - Координатор (Coordinator): Использовал для вынесения логики навигации из ViewController'ов, что делает их более переиспользуемыми и тестируемыми.
Шаблоны проектирования (GoF и iOS-специфичные):
- Делегат (Delegate): Повсеместно в iOS SDK (например,
UITableViewDelegate,CLLocationManagerDelegate). - Одиночка (Singleton): Для глобального доступа к менеджерам (
UIApplication.shared,FileManager.default). Важно использовать осознанно из-за проблем с тестируемостью. - Фабрика (Factory): Для инкапсуляции логики создания сложных объектов (например, разных типов ячеек таблицы).
- Наблюдатель (Observer): Через
NotificationCenter, KVO или, в современном стеке, через Combine (@Published,PassthroughSubject). - Адаптер (Adapter): Для приведения интерфейса класса к ожидаемому клиентом виду.
- Декоратор (Decorator): Реализуется через наследование или композицию (например, кастомные
UIViewс дополнительным поведением). - Строитель (Builder): Для пошагового создания сложных конфигурационных объектов.