假设我们有以下类:
看法
@interface ArticleView : UIView
@property IBOutlet UILabel *titleLabel;
@property IBOutlet UILabel *bodyLabel;
@end
模型
@interface Article : NSObject
@property NSString *title;
@property NSString *body;
@end
控制器
@interface ArticleViewController : UIViewController
@property Article *myArticle;
@property ArticleView *myArticleView;
- (void)displayArticle;
@end
@implementation
- (void)displayArticle {
// OPTION 1
myArticleView.titleLabel.text = myArticle.title;
myArticleView.bodyLabel.text = myArticle.body;
// ... or ...
// OPTION 2
myArticleView.article = myArticle;
}
@end
选项1
- PRO:视图和模型都没有相互耦合。
- CON:控制器需要知道模型和视图的细节。
选项 2
- PRO:控制器代码轻巧灵活(如果视图或模型更改,控制器代码保持不变。
- CON:视图和模型是耦合的,因此可重用性较低。
在选项 2 中,必须更改 ArticleView 以保存对模型的引用:
@interface ArticleView : UIView
@property IBOutlet UILabel *titleLabel;
@property IBOutlet UILabel *bodyLabel;
@property Article *article;
@end
然后可以覆盖文章设置器以相应地更新视图,如下所示:
- (void)setArticle:(Article *)newArticle {
_article = newArticle;
self.titleLabel.text = _article.title;
self.bodyLabel.text = _article.body;
}
所以我的问题是,就 OO 和 iOS/MVC 最佳实践而言,这两个选项中的哪一个是最好的?
我当然看到两者都在使用。我见过在 UITableViewCell 子类中常用的 OPTION 2。
我还读到视图和模型应该被设计成可重用的,而不依赖于任何东西,而视图控制器是最不可重用的。
我的直觉是使用 OPTION 1 仅仅是因为我宁愿视图控制器完成将模型绑定到视图的肮脏工作,并让模型和视图保持独立并且彼此不知道。但是由于某些视图被设计为只做一件事,因此将它们直接绑定到特定模型可能还不错。
我很想听听你对此的看法。