MVVM
来源:互联网 发布:数据分析师累吗 编辑:程序博客网 时间:2024/05/01 23:20
MVVM 可以兼容你当下使用的 MVC 架构。
MVVM 增加你的应用的可测试性。
MVVM 配合一个绑定机制效果最好。
如我们之前所见,MVVM 基本上就是 MVC 的改进版,所以很容易就能看到它如何被整合到现有使用典型 MVC 架构的应用中。让我们看一个简单的 Person Model 以及相应的 View Controller:
- @interface Person : NSObject
- - (instancetype)initwithSalutation:(NSString *)salutation firstName:(NSString *)firstName lastName:(NSString *)lastName birthdate:(NSDate *)birthdate;
- @property (nonatomic, readonly) NSString *salutation;
- @property (nonatomic, readonly) NSString *firstName;
- @property (nonatomic, readonly) NSString *lastName;
- @property (nonatomic, readonly) NSDate *birthdate;
- @end
Cool!现在我们假设我们有一个 PersonViewController ,在 viewDidLoad 里,只需要基于它的 model 属性设置一些 Label 即可。
- - (void)viewDidLoad {
- [super viewDidLoad];
- if (self.model.salutation.length > 0) {
- self.nameLabel.text = [NSString stringWithFormat:@"%@ %@ %@", self.model.salutation, self.model.firstName, self.model.lastName];
- } else {
- self.nameLabel.text = [NSString stringWithFormat:@"%@ %@", self.model.firstName, self.model.lastName];
- }
- NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- [dateFormatter setDateFormat:@"EEEE MMMM d, yyyy"];
- self.birthdateLabel.text = [dateFormatter stringFromDate:model.birthdate];
- }
这全都直截了当,标准的 MVC。现在来看看我们如何用一个 View Model 来增强它。
- @interface PersonViewModel : NSObject
- - (instancetype)initWithPerson:(Person *)person;
- @property (nonatomic, readonly) Person *person;
- @property (nonatomic, readonly) NSString *nameText;
- @property (nonatomic, readonly) NSString *birthdateText;
- @end
我们的 View Model 的实现大概如下:
- @implementation PersonViewModel
- - (instancetype)initWithPerson:(Person *)person {
- self = [super init];
- if (!self) return nil;
- _person = person;
- if (person.salutation.length > 0) {
- _nameText = [NSString stringWithFormat:@"%@ %@ %@", self.person.salutation, self.person.firstName, self.person.lastName];
- } else {
- _nameText = [NSString stringWithFormat:@"%@ %@", self.person.firstName, self.person.lastName];
- }
- NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- [dateFormatter setDateFormat:@"EEEE MMMM d, yyyy"];
- _birthdateText = [dateFormatter stringFromDate:person.birthdate];
- return self;
- }
- @end
Cool!我们已经将 viewDidLoad 中的表示逻辑放入我们的 View Model 里了。此时,我们新的 viewDidLoad 就会非常轻量:
- (void)viewDidLoad {
[super viewDidLoad];
self.nameLabel.text = self.viewModel.nameText;
self.birthdateLabel.text = self.viewModel.birthdateText;
}
所以,如你所见,并没有对我们的 MVC 架构做太多改变。还是同样的代码,只不过移动了位置。它与 MVC 兼容,带来更轻量的 View Controllers。
1 0
- MVVM
- MVVM
- MVVM
- MVVM
- MVVM
- MVVM
- MVVM
- MVVM
- mvvm
- MVVM
- MVVM
- mvvm
- MVVM
- MVVM
- MVVM
- MVVM
- MVVM
- MVVM
- idea中的jsp页面out对象无法调用write
- Remove Duplicates from Sorted Array
- 新浪微博分享MD5签名生成器没反应
- high_memeory 映射---3
- 2016年5月7日所用即所需
- MVVM
- linux平台下防火墙iptables原理
- MWC-xxd新西达电机及电调标定
- 目录
- 第3课:解读spark –streaming运行机制
- 多乘一
- 多重纹理和纹理组合器
- matlab处理lvm格式文本
- iOS 网络适配