iOS的Menerapkan MVP

MVP merupakan sebuah设计模式yang merupakan singkatan dari模型视图演示者。 Selain MVP terdapat设计模式Yang Menurut Saya Cukup Bagus,Yaitu MVVM。

Mengapa kali ini saya membahas MVP? Alasannya Adalah karena saya sedang terlibat projek yang menerapkan MVP。 简单! 😀

阿帕杨膜MVP spesial?。 iOS用户界面UIViewController,UIViewController ini biasanya berisi barisan kode campuran antara kode UI,kode bisnis,dll sehingga membuat UIViewController berisi banyak sekali barisan kode。 MVP成员membuat pemisahan kode tersebut lebih teratur dan benar-benar terpisah,dikarenakan UIViewController tidak lagi berisi kode bisnis dan logic namun hanya berisi kode UI。 Dengan membuat pemisahan antara kode UI dan kode bisnis /逻辑yang lebih baik,kita bisa membuat kode kita lebih mudah untuk dibuat测试用例-nya。 TDD在行动!

Dalam contoh kali ini,saya membuat sebuah aplikasi sederhana untuk menampilkan Alert ketika tombol di klik namun menggunakan设计模式MVP。 Berikut saya tampilkan struktur dari文件夹模块化saya:

Berikut saya sertakan kode pada文件User.swift:

 导入Foundationstruct用户{var emailAddress:字符串?  var fullname:String?} 

文件User.swift hanyalah文件模型yang berisi struktur数据模型kita。

Selanjutnya saya sertakan kode pada文件LoginPresenter.swift:

 导入Foundationprotocol LoginView {func showAlert(user:User)}协议LoginViewPresenter {init(view:LoginView,user:User)func login()}类LoginPresenter:LoginViewPresenter {让视图:LoginView让用户:用户所需的init(视图:LoginView,用户:用户){self.view =查看self.user =用户} //标记:—函数func login(){self.view.showAlert(user:self.user)}} 

Ini adalah文件演示者,演示者merupakan penggabung antara视图dan模型。 帕达(Pada)MVP,查看蒂达(Tidak Mengetahui)模型,丹模型(Tedak Mengetahui)查看,Semuanya harus melalui主持人。 Pada文件演示者dapat dilihat bahwa semua逻辑yang tidak berhubungan dengan UI dapat diletakkan dalam演示者。 Hal ini membuat视图akan menjadi lebih bersih dari kode逻辑丹bisnis。

Selanjutnya saya sertakan kode pada文件LoginViewController.swift:

 导入UIKit类LoginViewController:UIViewController,LoginView {var presenter:LoginViewPresenter!  @IBOutlet弱var emailAddressTextField:UITextField!  @IBOutlet弱var passwordTextField:UITextField!  @IBOutlet弱var loginButton:UIButton! 覆盖func viewDidLoad(){super.viewDidLoad()}覆盖func didReceiveMemoryWarning(){super.didReceiveMemoryWarning()} //标记:—动作@IBAction func login(_ sender:UIButton){self.presenter.login()} / /标记:—函数func showAlert(user:User){let alertViewController = UIAlertController(title:“ Welcome!”,消息:“ Welcome \(user.fullname!)!”,preferredStyle:.alert)let okAction = UIAlertAction(title ::“确定”,样式:.default,处理程序:无)alertViewController.addAction(okAction)self.present(alertViewController,动画:true,完成:nil)} //标记:—导航//在基于情节提要的应用程序中,您可能经常需要做一些准备工作,然后导航才能覆盖func prepare(for segue:UIStoryboardSegue,sender:Any?){//使用segue.destinationViewController获取新的视图控制器。  //将选定的对象传递给新的视图控制器。  }} 

Kode diatas merupakan文件视图atau UIViewController。

Setelah membuat semua文件tersebut lalu bagaimana cara semua文件tersebut dapat berhubungan?

 让模型=用户(电子邮件地址:“ test@gmail.com”,全名:“测试123”)让loginViewController = UIStoryboard(名称:“ Auth”,捆绑包:nil)。实例化ViewController(withIdentifier:“登录”)为!  LoginViewControllerlet presenter = LoginPresenter(视图:loginViewController,用户:模型)loginViewController.presenter = presenterlet navigationController = UINavigationController(rootViewController:loginViewController)self.present(navigationController,动画:true,完成:无) 

Dengan menggunakan kode diatas kita dapat membuat hubungan安塔拉模型,观点,dan主持人。

Sekian分享了iOS的MVP。 Contoh diatas merupakan contoh sederhana dari penerapan MVP dan secara fungsi memang hanya menampilkan Alert。 设计模式MVP bisa membantu和untuk membuat kode-kode和lebih模块化。

Keunggulan MVP:

  • 查看Lebih Bersih Dari Kode Logic Dan Dan Bisnis
  • Kode benar-benar terpisah antara 1 dan lainnya。 Sehingga lebih模块化。

Kekurangan MVP:

  • Alur Kode Yang Relatif Lebih Rumit
  • Cmd+Click karena jika kita melakukannya,maka Xcode,其协议为dari kode,而bukan Implementasi kodenya。