qidao123.com技术社区-IT企服评测·应用市场

标题: iOS VIPER架构 [打印本页]

作者: 反转基因福娃    时间: 2025-3-28 18:11
标题: iOS VIPER架构
深入相识 VIPER 架构及其与其他架构的对比

目次


什么是 VIPER 架构

VIPER 是一种 iOS 应用架构模式,旨在通过清晰的职责分离来提高代码的可维护性和可测试性。VIPER 代表五个核心组件:View、Interactor、Presenter、Entity 和 Router。每个组件都有其特定的职责,确保应用的各个部分相互独立,便于管理和扩展。

VIPER 各模块职责

View


  1. class UserListViewController: UIViewController, UserListViewProtocol {
  2.     var presenter: UserListPresenterProtocol?
  3.    
  4.     func showUsers(_ users: [User]) {
  5.         // 更新 UI 显示用户列表
  6.     }
  7.    
  8.     func showLoading() {
  9.         // 显示加载指示器
  10.     }
  11.    
  12.     func hideLoading() {
  13.         // 隐藏加载指示器
  14.     }
  15.    
  16.     func showError(_ message: String) {
  17.         // 显示错误信息
  18.     }
  19. }
复制代码
Interactor


  1. class UserListInteractor: UserListInteractorProtocol {
  2.     weak var presenter: UserListInteractorOutputProtocol?
  3.    
  4.     func fetchUsers() {
  5.         // 模拟网络请求并返回用户数据
  6.         DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
  7.             let users = [User(id: 1, name: "张三", email: "zhangsan@example.com")]
  8.             self.presenter?.usersFetched(users)
  9.         }
  10.     }
  11. }
复制代码
Presenter


  1. class UserListPresenter: UserListPresenterProtocol, UserListInteractorOutputProtocol {
  2.     weak var view: UserListViewProtocol?
  3.     var interactor: UserListInteractorProtocol?
  4.    
  5.     func viewDidLoad() {
  6.         view?.showLoading()
  7.         interactor?.fetchUsers()
  8.     }
  9.    
  10.     func usersFetched(_ users: [User]) {
  11.         view?.hideLoading()
  12.         view?.showUsers(users)
  13.     }
  14. }
复制代码
Entity


  1. struct User {
  2.     let id: Int
  3.     let name: String
  4.     let email: String
  5.    
  6.     var isValidEmail: Bool {
  7.         return email.contains("@")
  8.     }
  9. }
复制代码
Router


  1. class UserListRouter: UserListRouterProtocol {
  2.     static func createUserListModule() -> UIViewController {
  3.         let view = UserListViewController()
  4.         let presenter = UserListPresenter()
  5.         let interactor = UserListInteractor()
  6.         let router = UserListRouter()
  7.         
  8.         view.presenter = presenter
  9.         presenter.view = view
  10.         presenter.interactor = interactor
  11.         presenter.router = router
  12.         interactor.presenter = presenter
  13.         
  14.         return view
  15.     }
  16.    
  17.     func navigateToUserDetail(from view: UserListViewProtocol?, user: User) {
  18.         // 实现导航到用户详情页面的逻辑
  19.     }
  20. }
复制代码

VIPER 数据流向

在 VIPER 架构中,数据流向是单向的,确保了模块之间的解耦。数据流向如下:

与其他架构的对比

MVC (Model-View-Controller)


MVP (Model-View-Presenter)


MVVM (Model-View-ViewModel)


对比总结

维度MVCMVPMVVMVIPER可测试性★☆☆☆☆★★★☆☆★★★★☆★★★★★代码复用率★★☆☆☆★★★☆☆★★★★☆★★★★★学习曲线★☆☆☆☆★★☆☆☆★★★☆☆★★★★☆开发速率★★★★★★★★☆☆★★★☆☆★★☆☆☆得当项目规模小型中小型中大型大型/复杂
总结与最佳实践

VIPER 架构通过清晰的职责分离和模块化计划,提供了良好的可维护性和可测试性。得当大型项目和复杂业务场景。选择架构时应根据项目需求、团队规模和复杂度进行合理选择。
最佳实践发起

通过合理使用 VIPER 架构,可以提高项目标可维护性和扩展性,确保代码质量和团队协作的高效性。
下载demo

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4