Skip to content

Commit b57f675

Browse files
committed
Add Content
1 parent b43dd85 commit b57f675

File tree

4 files changed

+21
-1
lines changed

4 files changed

+21
-1
lines changed

chapter6/mvvm_on_ios.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
# MVVM On iOS
22

3-
有一个禅宗佛教的概念叫做"初心"。禅宗法师[铃木俊隆](http://baike.baidu.com/link?url=TLIi5l8x9oMLt-baIJo2-yzKnjjixIK6QlEPHvXfQPpH4Gyn-KGqhUReIv0TbikIygacpGmWj8GTBw2A9JfRa_)写道:"初学者的心中有很多可能性(莫名的点子),但在专家心里(这种可能性/点子)就相对少很多"。在写作本书的过程中,我经常会回到这个概念里重新审视自己,提醒自己对那些看起来很新的或者一些不习惯的事物不要过早下结论.
3+
有一个禅宗佛教的概念叫做"初心"。禅宗法师[铃木俊隆](http://baike.baidu.com/link?url=TLIi5l8x9oMLt-baIJo2-yzKnjjixIK6QlEPHvXfQPpH4Gyn-KGqhUReIv0TbikIygacpGmWj8GTBw2A9JfRa_)写道:"初学者的心中有很多可能性(潜意识的点子),但在专家心里(这种可能性/点子)就相对少很多"。在写作本书的过程中,我经常会回到这个概念里重新审视自己,提醒自己不要对那些看起来很新的或不习惯的事物过早下结论.
4+
5+
本着这种精神,我们回过头来看看你当初接触iOS应用开发的情形:与可能只知道使用Model-View-Controller(MVC)的架构来编写iOS应用的现在的你相比,那时候你一无所知。你的内心随时准备接纳外界无限的可能性(这里指的是任何可以编写iOS应用的方式)。而MVC社区的长老们指导你使用MVC架构来做,因为那就是他们所知道的苹果公司所倡导的方式。
6+
7+
如果你已经用这种方式开发iOS应用程序一段时间,你可能会熟悉MVC背后的另类意义:巨大的试图控制器.(因为MVC:恶搞成Massive View Controller的缩写)。很多时候,把业务逻辑和其他代码放在试图控制器中显得很方便,即使从架构的角度上来说把它们放在这里不是最完善的。
8+
9+
Model View View-Model 也称MVVM,是一种出自微软的替代MVC架构的新架构。我知道,我知道!iOS社区没有任何历史作为微软的铁杆粉丝而存在,但(微软)他们的软件工程小组确实做出了伟大的工作。MVVM不仅仅在.Net平台上使用---我们也可以在iOS平台上使用。就像我们在这一章将要看到的:与ReactiveCocoa结合使用,MVVM令人难以置信地适用于iOS。使用MVVM能够有效地减少ViewController中的业务逻辑,这会大大减少其臃肿的体积,也使得业务逻辑更容易测试。

chapter6/what_is_mvvm.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,15 @@
11
# 什么是MVVM
2+
3+
在传统的MVC架构的应用中,你有三种组件:数据模型、视图以及试图控制器。数据模型保持你的数据,而视图用来呈现这些数据。控制器介于这两个组件之间调解所有的交互。
4+
5+
这种中介(调解者)非常重要,数据模型不应该关心视图,反之亦然,一切都通过视图控制器来进行。在典型的iOS应用中,数据模型们都非常“薄(轻)”,意味着他们不包含业务逻辑。视图都属于UIKit,因此我们寄希望于Apple已经很好地测试过它的业务逻辑了。剩下的视图控制器它很少进行单元测试。
6+
7+
当新的数据到达时,model会通知ViewController(通常是通过键-值观察(KVO)的方式),然后ViewController会更新View。当View接收交互时,ViewController会更新Model。
8+
9+
![Typical MVC Paradigm](../images/Typical_MVC_Paradigm.png)
10+
11+
正如你所看到的ViewController隐式地负责很多事情:验证输入、将模型数据映射到面向用户的信息、操作视图层次结构等等。
12+
13+
MVVM将大量的类似上面的业务逻辑从viewController中抽离出来了。
14+
15+
![MVVM_high_level](../images/MVVM_high_level.png)

images/MVVM_high_level.png

34.3 KB
Loading

images/Typical_MVC_Paradigm.png

36.1 KB
Loading

0 commit comments

Comments
 (0)