Структура:
Проблемы:
// Классический MVC пример
class UserController: UIViewController {
@IBOutlet weak var nameLabel: UILabel! // View
var user: User! // Model
override func viewDidLoad() {
nameLabel.text = user.name // Controller логика
}
}
Улучшение MVC:
Отличие от MVC:
Ключевые особенности:
// MVVM пример
class UserViewModel {
@Published var userName: String = ""
init(user: User) {
userName = "\(user.firstName) \(user.lastName)"
}
}
class UserViewController: UIViewController {
var viewModel: UserViewModel!
private var cancellables = Set<AnyCancellable>()
override func viewDidLoad() {
viewModel.$userName
.assign(to: \.text, on: nameLabel)
.store(in: &cancellables)
}
}
Модульная архитектура:
Преимущества:
Критерий | MVC | MVP | MVVM | VIPER |
---|---|---|---|---|
Тестируемость | Низкая | Средняя | Высокая | Очень высокая |
Сложность | Низкая | Средняя | Средняя | Высокая |
Boilerplate | Минимум | Умеренно | Умеренно | Много |
Подходит для | Простых экранов | Средних проектов | Сложных UI | Больших проектов |
Binding | Нет | Ручной | Автоматический | Ручной |
Факторы выбора:
Рекомендации: