美文网首页
【设计模式】02 - MVC模式 (Model-View-Con

【设计模式】02 - MVC模式 (Model-View-Con

作者: Lebron_James | 来源:发表于2019-05-06 19:15 被阅读0次

这篇文章是我阅读raywenderlich.comDesign Patterns by Tutorials的总结,文中的代码是我阅读书本之后根据自己的想法修改的。如果想看原版书籍,请点击链接购买。


MVC (model-view-controller) 把所有类分成三种类型:模型、视图和控制器。

MVC在iOS开发中是非常常见的,因为这是Apple重度使用的一种设计模式。

Model:保存应用数据,通常是Struct和Class类型。在Swift中,我们优先选择Struct,因为Struct是值类型,可以避免不必要的循环引用问题。
View:在屏幕上显示应用界面,通常继承于UIView
Controller:控制和协调Model和View,通常继承于UIViewContorller

Controller可以强引用Model和View,所以可以直接访问Model和View。但是反过来Model和View不能强引用Controller,否则会造成引用循环。

Model可以通过属性观察者来告诉Controller数据发生变化,例如willSetdidSet;而View可以通过手势或者valueChanged事件等告诉Controller。

简单Demo

需求是展示一个用户的名字和年龄:

  1. Model:定义了一个Person,有nameage属性
  2. ViewnameLabelageLabel
  3. ControllerPersonInfoViewController,强引用了两个views,nameLabelageLabel;还强引用了person

viewDidLoad我们从服务器获取数据,获取到数据之后,我们修改person模型的值;模型被修改后告诉控制器,控制器更新nameLabelageLabel。这就是一个简单的MVC。

import UIKit

struct Person {
    var name: String
    var age: Int
}

final class PersonInfoViewController: UIViewController {

    @IBOutlet var nameLabel: UILabel!
    @IBOutlet var ageLabel: UILabel!

    var person: Person? {
        didSet {
            nameLabel.text = person?.name
            ageLabel.text = person?.age
        }
    }
 
    override func viewDidLoad() {
        super.viewDidLoad()
        fetchPersonInfo()
    }

    private func fetchPersonInfo() {
        // 假设name和age是从服务器获取的
        let name = "Lebron"
        let age = 25
        person = Person(name: name, age: age)
    }
}

总结

在我们刚刚开始学iOS开发时,一般都是从MVC模式开始的。但是MVC有个问题,如果是比较大型的项目,Controller的代码将会变得非常复杂,不方便维护。所以在实际开发中,大型的项目,我们一般考虑使用其他设计模式,例如MVVM等。

欢迎加入我管理的Swift开发群:536353151

下一篇文章:【设计模式】03 - 代理模式

相关文章

  • 【设计模式】02 - MVC模式 (Model-View-Con

    这篇文章是我阅读raywenderlich.com的Design Patterns by Tutorials的总结...

  • 游戏开发中的MVVM设计模式

    mvc设计模式 说到mvvm设计模式不得不先说说mvc设计模式。mvc其实不是一个模式,而是几个模式结合使用的结果...

  • 浅析 MVC

    一、 MVC 设计模式 1. 设计模式 设计模式,是通用代码(组织方式)的一种统称 2. MVC 是什么 MVC ...

  • iOS开发之MVVM+RAC架构模式

    在说MVVM之前,首先要了解我们最常用的MVC设计模式⬇️ 1.MVC设计模式 苹果官方将MVC设计模式作为iOS...

  • JavaWeb入门——MVC

    1.MVC设计模式 1.1MVC模式 1.2MVC模式示例 index.jsp WelcomeServlet.ja...

  • 面试题总结(二)

    常用的设计模式:MVC、工厂、代理、KVO MVC设计模式 MVC是一种架构模式,M表示数据模型Model,V表示...

  • 浅析 MVC

    一、MVC是什么? MVC是一种设计模式(那设计模式又是什么呢?简单粗暴的说好用的东西就是设计模式),MVC能够使...

  • 对angularJS一些概念的理解

    angularJS是以MVC为设计模式的JS框架 MVC(Model View Controller)设计模式(d...

  • iOS 设计模式 一

    设计模式随记 系统架构模式 1. MVC - MVVM - MVP - MVVM、MVC协调版 MVC :...

  • 设计模式演变过程

    基本设计模式之MVC模式 基本设计模式之MVP模式 基本设计模式之MVVM模式 SPA和MPA SPA:单页面应用...

网友评论

      本文标题:【设计模式】02 - MVC模式 (Model-View-Con

      本文链接:https://www.haomeiwen.com/subject/beodoqtx.html