iOS MVP(Model-View-Presenter)概述
MVP是一种软件架构模式,特别适用于iOS开发。它将应用程序分为三个主要组件:
以下是一个简单的iOS MVP示例:
struct User {
let name: String
let age: Int
}
protocol UserPresenterProtocol {
var user: User { get set }
func updateUserName(_ name: String)
func getUserInfo() -> String
}
class UserPresenter: UserPresenterProtocol {
var user: User
init(user: User) {
self.user = user
}
func updateUserName(_ name: String) {
user.name = name
}
func getUserInfo() -> String {
return "Name: \(user.name), Age: \(user.age)"
}
}
import UIKit
class UserViewController: UIViewController {
var presenter: UserPresenterProtocol!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var ageLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
updateUI()
}
func updateUI() {
nameLabel.text = presenter.getUserInfo().split(separator: ", ").first
ageLabel.text = presenter.getUserInfo().split(separator: ", ").last
}
@IBAction func updateNameButtonTapped(_ sender: UIButton) {
let newName = "New Name"
presenter.updateUserName(newName)
updateUI()
}
}
原因:View直接调用Presenter的方法,导致耦合度过高。
解决方法:使用协议(Protocol)来定义View和Presenter之间的交互接口,降低耦合度。
原因:Presenter包含了过多的业务逻辑,导致代码难以维护。
解决方法:将复杂的业务逻辑拆分成多个小的Presenter或Service,遵循单一职责原则。
原因:Presenter依赖于具体的View实现,难以进行单元测试。
解决方法:使用Mock对象来模拟View的行为,确保Presenter的单元测试独立于View。
通过以上方法,可以有效解决MVP模式在实际开发中遇到的问题,提升代码质量和可维护性。