İçeriğe geç

MVP Pattern

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]
    }
}

 

 

 

 

Tarih:Design PatternsiOS

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca