Merhabalar bu yazımda İOS ile MVP tasarım kalıbı nedir ? ve nasıl kullanırız bunu incelemiş olacağız.
MVC yapısından sonra tasarlanmış diğer bir kalıpta MVP (Model – View – Presenter) kalıbıdır. Oldukça işlevsel güzel bir tasarım kalıbıdır. Mantık olarak MVC ile benzer bir mantığı vardır. Ancak burdaki önemli farklardan biri Passive View yaklaşımıdır. Bu yaklaşım ile Model yapısı ile View yapısını tamamen ayırmak bir birlerine bulaşmadan Presenter sınıfı aracılığı ile işlemleri halletmektir.
Bundan önceki yazımda bahsettiğim MVVM yapısından önemli bir farkıda Presenter yapısı View ile ilgili bilgileri bilir ve bağlantı içindedir. View sadece event işlemleri ile Presenter yapısını tetikler böylelikle Presenter içerisinde Model yapısı güncellenir veya diğer işlemler gerçekleşir.
Model yapısı aynı şekilde aynıdır. Data, sunucu işlemleri burada gerçekleşmektedir. Presenter yapısının Passive View’den haberdar olması için Swift ile protokol yapısını kullanmaktayız buda oldukça işlevsellik kazandırmaktadır.
Aşağıda yazdığım MVP yapısında sınıfları inceleyebilir, bu mantık ile projelerinizi modelleyebilirsiniz.
Model yapısı
import UIKit class Model: NSObject { var nick:String! var pass:String! var mail:String! init(nick:String,pass:String,mail:String) { self.nick = nick self.pass = pass self.mail = mail } func saveServer() { print("\(self.nick!) - \(self.mail!) - \(self.pass!) Save values in server.") } }
Presenter Yapısı
import UIKit protocol viewProtocol: class { func submit() -> [String] } protocol presenterProtocol { init(view:viewProtocol) func getData() -> [String] } class Presenter: NSObject, presenterProtocol { var view:viewProtocol! private var model:Model! required init(view:viewProtocol) { self.view = view } func getData() -> [String] { return [model.nick,model.mail,model.pass] } func setData() { let datas = view.submit() model = Model(nick: datas[0], pass: datas[1], mail: datas[2]) model.saveServer() } }
View yapısı
import UIKit class ViewController: UIViewController { var nickLabel = UILabel() var sButton = UIButton() var presenter:Presenter! override func viewDidLoad() { super.viewDidLoad() setupView() presenter = Presenter(view: self) sButton.addTarget(self, action: #selector(tapButton(_ :)), for: .touchUpInside) } func setupView() { sButton.setTitle("Yolla", for: .normal) sButton.backgroundColor = UIColor.black sButton.frame = CGRect(x: 50, y: 50, width: 100, height: 100) view.addSubview(sButton) } func tapButton(_ sender:UIButton) { presenter.setData() } }// extension ViewController: viewProtocol { func submit() -> [String] { let nick = "Kenan" let mail = "mail@kenanatmaca.com" let pass = "******" return [nick,pass,mail] } }
Bu yazı yorumlara kapalı.