Design Patterns 学习笔记

Published on 2020 - 03 - 09

重点关注

  • MVC
  • MVVM
  • Coordinator

Model-View-Controller Pattern

如果只用MVC 模式,会在 controller 中放入太多逻辑,view controllers 会变得非常大,Massive View Controller

建立项目后,重构View的名称,建立MVC组文件( Command + Option + N ),将不同的文件放入组。然后告诉Xcode新的Info.plist的位置。

MVC

  • Controller 负责在 model 和 view之间协调,将 model 值给view,处理 从 view 的IBAction调用。
  • MVC 是个好的起点,但有一些限制,不是所有对象都可以分到MVC,有时Controller 会变得很大。

Delegation Pattern

一个 object 用另一个 helper 助手来提供数据或完成一个任务,而不是自己完成。
有三个部分组成

  • 一个需要代理的对象,称为 delegating object
  • 代理协议,定义了代理需要实现的方法
  • 一个代理,实现代理协议的助手

什么时候使用?

将大的类分解,或者建立通用、可复用的组件。UIKit 中大量使用的 Delegation Pattern。大多以DataSource-名字(提供数据)和 Delegate-名字(接受数据或事件) 命名。

使用注意事项

不要过度使用,如果一个对象有多个代理,可能对象做得太多,最好把分解功能给不用的对象。
同时注意不要建立代理环。

Observer Pattern 观察模式

一个对象观察另一个对象的电话。Swift 5.1 中通过在 Combine 框架的Pulisher加入了语言级别的支持。

  1. Subscriber,是观察者,观察和接受更新
  2. Pubisher,被观察者,和发送更新
  3. Value

何时使用?

想要在另一个对象变化时接受数据。
通常和MVC一起使用,view controller 有 subscriber, model 有 publisher,model 在不知道view controller 类型的情况下可以和view controller 通讯。

Model-View-ViewModel (MVVM)

开始建立App时可以使用 MVC

Coordinator Pattern

何时使用?
解耦 View Controller,只有 Coordinator 知道 view controller。view controllers 可以重用,如果想要修改流程,只要新建一个 Coordinator就可以。

使用注意事项

如果是简单的App,用Coordinator Pattern 太过了,如果是复杂或长期的项目,能够提高你的 view controllers 的重用。