mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-25 04:17:17 +00:00
feature: App 逆向防护
This commit is contained in:
@@ -13,6 +13,8 @@ MVC 模式下,软件被划分为视图(View:用户界面)、控制器(
|
||||
所有的通信都是单向的。
|
||||
|
||||
|
||||
|
||||
|
||||
## MVP
|
||||
|
||||
MVP 模式将 Controller 改名为 Presenter,通信改变了通信方向
|
||||
@@ -23,6 +25,10 @@ MVP 模式将 Controller 改名为 Presenter,通信改变了通信方向
|
||||
2. Model 与 View 不发生联系,都通过 Presenter 传递
|
||||
3. View 层非常薄。不部署任何业务逻辑,称为“被动视图(Passive View)”,即没有任何主动性,而 Presenter 非常厚,所有的逻辑都部署在这层
|
||||
|
||||
如果 Presenter 这一层很厚的话,可以继续拆,比如再增加一个 Interactor 的角色,专门处理处理 View 相关响应事件。这样子角色更多,职责也更清晰。维护也方便。
|
||||
|
||||
|
||||
|
||||
## MVVM
|
||||
|
||||
MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。
|
||||
@@ -52,11 +58,14 @@ MVVM 就是 MVC 的增强版,将展示层逻辑单独拎出来,即 ViewModel
|
||||
|
||||
- MVVM 兼容当下的 MVC 机构
|
||||
- MVVM 增加应用的可测试性
|
||||
- MVVM 配合一个绑定机制效果最好
|
||||
- MVVM 配合一个绑定机制效果最好
|
||||
|
||||
|
||||
|
||||
## 一个简单的例子
|
||||
|
||||
PersonModel
|
||||
```
|
||||
```objective-c
|
||||
@interface Person : NSObject
|
||||
|
||||
- (instancetype)initwithSalutation:(NSString *)salutation firstName:(NSString *)firstName lastName:(NSString *)lastName birthdate:(NSDate *)birthdate;
|
||||
@@ -69,7 +78,7 @@ PersonModel
|
||||
@end
|
||||
```
|
||||
PersonViewController
|
||||
```
|
||||
```objective-c
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
|
||||
@@ -87,7 +96,7 @@ PersonViewController
|
||||
上面是标准的 MVC。现在我们考虑用 ViewModel 增加改进下
|
||||
|
||||
PersonViewModel
|
||||
```
|
||||
```objective-c
|
||||
@interface PersonViewModel : NSObject
|
||||
|
||||
- (instancetype)initWithPerson:(Person *)person;
|
||||
@@ -124,17 +133,15 @@ PersonViewModel
|
||||
```
|
||||
|
||||
此时,我们的 ViewController 会很轻量
|
||||
```
|
||||
```objective-c
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
self.nameLabel.text = self.viewModel.nameText;
|
||||
self.birthdateLabel.text = self.viewModel.birthdateText;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
可测试?View Controller 是出了名的难测试。因为传动的 VC 很重,在 MVVM 的世界里,代码各司其职,测试 View Controller 变得较为容易
|
||||
```
|
||||
```objective-c
|
||||
SpecBegin(Person)
|
||||
NSString *salutation = @"Dr.";
|
||||
NSString *firstName = @"first";
|
||||
|
||||
Reference in New Issue
Block a user