1. 架构
- 软件开发中的设计文案
- 类与类之间的关系,模块与模块之间的关系,客户端与服务端的关系,故可大可小。
2. 经常听到的架构名词
- MVC,MVP,MVVM,VIPER,CDD
- 三层架构、四层架构
3. MVC
- 苹果MVC,view和model不通信,view和model彼此不知道对方的存在,view的视图的值在控制器里实现。
- 优点是视图和模型可以重复利用,缺点是控制器太臃肿,如果视图是通用的,可以考虑这种模式
@interface CustomCell
@property (nonatomic, strong, readOnly) UILabel *nameLabel;
@property (nonatomic, strong, readOnly) UILabel *addressLabel;
@end
@implementation ViewController
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell = [tableView
dequeueReusableCellWithIdentifier:@“CustomCell”
forIndexPath:indexPath];
cell.nameLabel.text = @"旺旺";
cell.addressLabel.text = @"北京市";
return cell;
}
@end
- MVC变种,view和model相绑定,view的子视图在内部赋值,缺点是视图绑定不同的model时不太友好。
@interface MJAppView : UIView
@property (strong, nonatomic) MJApp *app;
@end
@interface MJAppView()
@property (weak, nonatomic) UIImageView *iconView;
@property (weak, nonatomic) UILabel *nameLabel;
@end
@implementation MJAppView
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
UIImageView *iconView = [[UIImageView alloc] init];
iconView.frame = CGRectMake(0, 0, 100, 100);
[self addSubview:iconView];
_iconView = iconView;
UILabel *nameLabel = [[UILabel alloc] init];
nameLabel.frame = CGRectMake(0, 100, 100, 30);
nameLabel.textAlignment = NSTextAlignmentCenter;
[self addSubview:nameLabel];
_nameLabel = nameLabel;
}
return self;
}
- (void)setApp:(MJApp *)app
{
_app = app;
self.iconView.image = [UIImage imageNamed:app.image];
self.nameLabel.text = app.name;
}
// Controller
#import "ViewController.h"
#import "MJApp.h"
#import "MJAppView.h"
@interface ViewController () <MJAppViewDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 创建view
MJAppView *appView = [[MJAppView alloc] init];
appView.frame = CGRectMake(100, 100, 100, 150);
appView.delegate = self;
[self.view addSubview:appView];
// 加载模型数据
MJApp *app = [[MJApp alloc] init];
app.name = @"QQ";
app.image = @"QQ";
// 设置数据到view上
appView.app = app;
}
4. MVP(Model-View-Presenter)
这里Presenter的作用类似于MVC里的控制器的作用,这里面model和view依旧不直接通信:
View <==> Presenter <==> Model
5. 分层架构
界面层(新闻列表界面)-->业务层(加载新闻数据)-->数据层(通过网络、本地数据)
主要有三层架构和四层架构(加了网络层)两种,而MVC、MVP、MVVM这主要是针对界面来说的,再往上才是分层架构
以上部分为底层原理部分有关架构设计的课程,比较简单
网友评论