feature: App 逆向防护

This commit is contained in:
杭城小刘
2024-07-15 20:03:01 +08:00
parent 13f7457be9
commit 83fefff66b
109 changed files with 2549 additions and 672 deletions

View File

@@ -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";