您的位置:首页 > 游戏 > 游戏 > 安阳seo网站优化_龙岩全网搜系统开发_小红书怎么做关键词排名优化_廊坊seo

安阳seo网站优化_龙岩全网搜系统开发_小红书怎么做关键词排名优化_廊坊seo

2024/12/23 16:39:16 来源:https://blog.csdn.net/ScheenDuan/article/details/142794419  浏览:    关键词:安阳seo网站优化_龙岩全网搜系统开发_小红书怎么做关键词排名优化_廊坊seo
安阳seo网站优化_龙岩全网搜系统开发_小红书怎么做关键词排名优化_廊坊seo

MVC

MVC 是一种将应用程序分为三部分的架构模式:Model(模型)、View(视图)、Controller(控制器)。每部分负责不同的职责,使代码更加模块化、易于维护。

Model:负责业务数据的管理,包含业务数据的结构和逻辑。以及数据存储。

View:负责界面的展示和用户交互。

Controller:负责连接 Model 和 View,处理用户输入并更新 Model 和 View。

其中ControllerModel和View的桥梁,见下图:

整个框架的设计最优结构是View层不依赖Controller层而独立存在,Model层不依赖Controller层和View层独立存在,Controller层负责关联二者,View层只负责展示,Model层持有数据和业务的具体实现,而Controller层则处理事件响应以及业务的调用以及通知界面更新。三者之间一定要明确的定义为单向依赖,而不应该出现双向依赖

Swift demo

import UIKit// Model: 数据结构
struct User {let name: Stringlet age: Intfunc isAdult() -> Bool {return age >= 18}
}// View: 展示用户信息
class UserView: UIView {private let nameLabel = UILabel()private let ageLabel = UILabel()override init(frame: CGRect) {super.init(frame: frame)setupView()}required init?(coder: NSCoder) {super.init(coder: coder)setupView()}private func setupView() {addSubview(nameLabel)addSubview(ageLabel)// ...布局代码省略}func updateView(name: String, age: Int) {nameLabel.text = "Name: \(name)"ageLabel.text = "Age: \(age)"}
}// Controller: 连接 Model 和 View
class UserController: UIViewController {private let userView = UserView()private var user: User?override func viewDidLoad() {super.viewDidLoad()view.addSubview(userView)// ...布局代码省略// 设置 Model 并更新 ViewuserView.updateView(name: "Alice", age: 25)}
}

好处:提高开发效率,简化操作

坏处:

• UIViewController 变得过于臃肿,因为它承担了太多职责。

• View 和 Controller 间的耦合度较高,难以测试。

MVP

MVP 是一种改进的 MVC 设计模式,它通过 Presenter 更清晰地管理 View 和 Model 之间的交互。MVP 中 View 和 Model 的依赖关系较少,逻辑处理更加集中在 Presenter 中。MVP 模式通过引入 Presenter 进一步解耦,将业务逻辑与视图更新独立出来。具体来说:

Model:负责数据处理和业务逻辑,与 MVC 中的 Model 类似。它处理所有与数据相关的操作,比如获取、保存和更新数据。

View:只负责显示 UI 和用户的输入,尽可能简单。它不直接与 Model 交互,而是通过 Presenter 进行通信。View 不包含任何业务逻辑。

Presenter:是 View 和 Model 的中间层,负责从 Model 获取数据并传递给 View,同时处理用户输入和更新 Model。Presenter 不依赖于具体的 UI 框架,因此更易于测试。

结构如下:

在 MVP 中,View 非常轻量,几乎不包含任何业务逻辑。所有与 View 相关的业务逻辑都交给 Presenter 来处理。View 和 Model 之间没有直接交互,所有交互都通过 Presenter。

优点

• Presenter 不依赖具体的 View,实现了业务逻辑的分离,增强了代码的可测试性。

缺点

• 由于通过协议来定义 View,会带来额外的代码复杂度。

MVVM

MVVM 是一种更注重数据绑定和解耦的架构模式,分为三部分:Model(模型)、View(视图)、ViewModel(视图模型)。其中视图模型(ViewModel)其实就是MVP模式中的P

Model:和 MVC 中类似,负责数据管理。

View:负责界面的展示。

ViewModel:负责处理 Model 和 View 的逻辑,通常包含数据的转换、绑定等,使 View 更加轻量化。

swift demo

ViewModel & Model

import Foundationprotocol ViewModelDelegate: AnyObject {func didUpdateData(_ viewModel: ViewModel)
}class ViewModel {weak var delegate: ViewModelDelegate?private var model: Modelvar displayText: String {return "Hello, \(model.name)"}init(model: Model) {self.model = model}func updateName(to newName: String) {model.name = newNamedelegate?.didUpdateData(self) // 通知 View 数据已更新}
}class Model {var name: Stringinit(name: String) {self.name = name}
}

ViewController (View)

import UIKitclass ViewController: UIViewController, ViewModelDelegate {private var viewModel: ViewModel!private let nameLabel = UILabel()private let changeButton = UIButton(type: .system)override func viewDidLoad() {super.viewDidLoad()// 初始化 Model 和 ViewModellet model = Model(name: "World")viewModel = ViewModel(model: model)viewModel.delegate = selfsetupUI()updateUI()}private func setupUI() {view.backgroundColor = .whitenameLabel.translatesAutoresizingMaskIntoConstraints = falseview.addSubview(nameLabel)nameLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = truenameLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = truechangeButton.setTitle("Change Name", for: .normal)changeButton.translatesAutoresizingMaskIntoConstraints = falseview.addSubview(changeButton)changeButton.topAnchor.constraint(equalTo: nameLabel.bottomAnchor, constant: 20).isActive = truechangeButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = truechangeButton.addTarget(self, action: #selector(changeName), for: .touchUpInside)}@objc private func changeName() {viewModel.updateName(to: "MVVM")}private func updateUI() {nameLabel.text = viewModel.displayText}// ViewModelDelegate 方法,ViewModel 数据变化时触发func didUpdateData(_ viewModel: ViewModel) {updateUI()}
}

优点

• View 和业务逻辑的完全分离,增强了代码的可测试性。

• 数据绑定使得 UI 更新非常方便。

缺点

• 初期代码复杂度较高,尤其是在没有使用响应式编程的情况下。

参考:

https://medium.com/@wanghaonanlpc/mvc-vs-mvp-vs-mvvm-bfcf7568aac0

iOS简单理解区分MVC、MVP、MVVM_ios mvvm-CSDN博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com