Make everything as simple as possible, but not simpler — Albert Einstein*html
把每件事,作简单到极致,但又不过于简单 - 阿尔伯特·爱因斯坦ios
何为设计模式编程
其实这三个解释是一个意思,只是给出不一样的说法帮助理解这个抽象的概念。swift
为何用设计模式设计模式
OO(面向对象)设计原则网络
OOP(面向对象编程)原则闭包
名称 | 简介 |
---|---|
单一职责 原则 | 类的职责要单一,不能将太多的职责放在一个类中 |
开闭原则 | 软件实体对扩展是开放的,但对修改是关闭的,即在不修改一个软件实体的基础上去扩展其功能 |
里氏代换原则 | 在软件系统中,一个能够接受基类对象的地方必然能够接受一个子类对象 |
依赖倒转原则 | 要针对抽象层编程,而不要针对具体类编程 |
接口隔离原则 | 使用多个专门的接口来取代一个统一的接口 |
合成复用原则 | 在系统中应该尽可能多使用组合和聚合关联关系,尽可能少使用甚至不使用继承关系 |
迪米特法则 | 一个软件实体对其余实体的引用越少越好,或者说若是两个类没必要彼此直接通讯,那么这两个类就不该当发生直接的相互做用,而是经过引入一个第三者发生间接交互 |
MV(X)架构
MVC 设计模式mvc
以 IOS 开发为例,这里的 Controller
实际上是 UIViewController。异步
这个是理想中的模型,可是在实际开发过程当中,并无想象中那样清晰。咱们不少人都会觉的这个模式下的 UIViewController 太臃肿了,并且大大下降了 Contrlller 的重用性。咱们在用这个模式的时候可能不少时候都是在考虑这样一个问题,网路请求究竟是 Model 负责仍是 Controller 负责。
View和 Model 是相互独立的这点很好,能够方便后来的单元测试。可是,咱们通常会把复杂的业务逻辑放到 Controller 里面,这形成了很难去测试 Controller 。IOS 开发中 View 的整个生命周期都是须要 Controller 来管理,这就形成了 View 和 Controller 之间存在严重的耦合现象,在项目庞大以后看起来会特别散乱。
MVP模式
以 IOS 开发为例,这里的 View
实际上是 UIViewController。
它是由 MVC 演变而来的,最大的变化莫过于上面这句话。对 MVP 的 Presenter 根本不用关心 ViewController 的生命周期,因此在 Presenter 里面几乎没有涉及到 UI 的代码,咱们全部的 UI 处理所有放到了 UIViewController 里面,这样的话很符合以前说的单一职责。
这里要强调一下 MVP 模式的是双向通讯的,咱们看一段代码
// Assembling of MVP let model = Person(firstName: "David", lastName: "Blaine") let view = GreetingViewController() let presenter = GreetingPresenter(view: view, person: model) view.presenter = presenter
在这里面 presenter 同时持有 Model 和 View 两个对象,当用户操做 View 而后调用 Presenter 来改变 Model,Model 更新完毕后,presenter 调用 View 的方法来更新 UI。
MVVM模式
以 IOS 开发为例,这里的 View
实际上是 UIViewController。
这个模式彻底是由 MVP 进化过来的,它和 MVP 的不一样点在于 ViewModel 和 View 之间的通讯采用的是数据绑定,ViewModel 不像 MVP 中的 presenter直接持有 View 对象,在这个模式中,ViewModel没法直接调用 View 来更新 UI 而是经过事件回调的方式来通知 View 更新,好比经过协议、通知、代理、闭包等等一些方式来异步的更新 UI。这是跟 MVP 最大的区别。这个是为了知足UI层更加细节化、可定制化。
// Assembling of MVVM let model = Person(firstName: "David", lastName: "Blaine") //View中实现了delegate let view = GreetingViewController() let viewModel = GreetingViewModel(person: model) //让 ViewMode 持有此代理 viewModel.delegate = view view.viewModel = viewModel
以上就是我本身对三种模式的理解,但愿对你们有所帮助,若有错误还请留言指出。
参考连接:
http://john-kong19.iteye.com/blog/934105
http://www.jianshu.com/p/b42a26623aeb
http://www.jianshu.com/p/75fab47aaacc
http://www.programmer-club.com.tw/showSameTitleN/c/42739.html
http://willtea.iteye.com/blog/1704806
http://blog.csdn.net/txchen/article/details/1554361
https://blog.coding.net/blog/ios-architecture-patterns