iOS体系结构:MVVM

到目前为止,在软件开发中,MVC已成为最受欢迎的体系结构之一。 它已在每个网站,桌面或移动应用程序中使用。 但这是针对iOS应用程序的优化解决方案吗?

首先,让我们谈谈什么是iOS架构的良好设计?

  1. 在具有严格角色的实体之间均衡分配职责。
  2. 可测试性通常来自第一个功能(不用担心:使用适当的体系结构很容易实现)。
  3. 易于使用 ,维护成本低。

让我们再次谈论MVC定义。 MVC代表模型-视图-控制器。

  • 模型:用于表示数据及其周围的一些逻辑。
  • 视图:代表用户界面(UI)。
  • 控制器:模型和视图之间的中介者。 它从View接收事件以修改Model并根据Model的更改更新View。

在这里,由于Controller是View和Model之间的中介,所以他们彼此之间并不了解。 这样好吗

在iOS中,模型可以是用于存储数据的NSObject类。 查看可能的UIControl,例如UIButton,UILabel,UITextField等。最后,Controller是UIViewController的子类。 等等,我说的是“查看”-控制器。

是的,不仅是控制器。 在Cocoa MVC中,Controller参与了View的生命周期。 UIViewController甚至是UIView的子类。 UIViewController处理用户在UI上的大部分交互,并且负责将数据从模型绑定到视图。 ViewController做很多事情:获取数据,显示UI,自定义动画等等。随着时间的推移,ViewController将成为大量的视图控制器。 您的代码将变得一团糟,很难阅读,调试和测试。 MVC仍然适合小型应用程序,但是,当您的项目越来越大时,实现单元测试是一项艰巨的任务,因为这些模块紧密耦合。 因此,我们需要尽可能地分离控制器,视图和模型,这是MVVM的需求。

MVVM:模型—视图— ViewModel

这里有什么新消息?

  • ViewController与Model分开。
  • ViewModel现在是拥有模型的人,负责处理大多数应用程序逻辑,包括绑定数据,更新数据,获取数据等等。
  • 从ViewController进行的所有数据访问都必须通过ViewModel。 现在,ViewController将处理用户的交互,显示数据并进行一些动画处理。 ViewController被视为View。

让我们通过一个简单的应用程序来详细了解。 用户界面只有1个表格,该表格将获取并显示一些漂亮女孩的照片。

这是我们的模型,它存储数据,并对这些数据有一些逻辑

ViewController有一个ViewModel将从服务器获取数据

ViewController将使用ViewModel来获取数据

从ViewController对Model的所有访问都必须通过ViewModel

View(GirlCell)将使用一些参数通过函数将数据绑定到UI上显示

结果如下:

这只是一个演示,因此请忽略我难看的UI。

总结: IMHO,MVC或MVVM,甚至VIPER都有其优缺点。 决定要在应用程序中使用哪种架构取决于许多因素:目的,应用程序的大小,甚至是应用程序的潜力,……如果您要构建一百万个用户的应用程序,并且您的团队可能多达20人,那么应该是MVVM或VIPER。 但是,如果这只是展示您做某事的能力的一个小演示,请不要过多使用那些复杂的结构。 简单点,就是MVC。

结帐演示代码: https : //github.com/dzungnguyen1993/MVVM-Sample

在此演示中,我将Swift 3用于客户端应用程序,并将Spark + Heroku用于创建简单的API。 本主题仅用于演示目的,我对任何版权问题概不负责。

参考文献:

  • https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52
  • https://developer.ibm.com/open/2015/12/16/using-a-model-view-viewmodel-architecture-for-ios-ready-apps/

祝你晚安!