关于View层的规范和组织

前言

viewController的代码应该差不多这样:

关于View层的规范和组织_第1张图片

要点如下:

所有的属性都使用getter和setter

不要在viewDidLoad里面初始化view然后addSubview. 在viewDidLoad里面只做addSubview的事情, 属性的初始化, 则交给getter去做.
比如这样:

#pragma mark - life cycle
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:self.firstTableView];
    [self.view addSubview:self.secondTableView];
    [self.view addSubview:self.firstFilterLabel];
    [self.view addSubview:self.secondFilterLabel];
    [self.view addSubview:self.cleanButton];
    [self.view addSubview:self.originImageView];
    [self.view addSubview:self.processedImageView];
    [self.view addSubview:self.activityIndicator];
    [self.view addSubview:self.takeImageButton];

    [self layoutPageSubviews];
}

- (void) layoutPageSubviews
{
    CGFloat width = (self.view.width - 30) / 2.0f;

    self.originImageView.size = CGSizeMake(width, width);
    [self.originImageView topInContainer:70 shouldResize:NO];
    [self.originImageView leftInContainer:10 shouldResize:NO];

    self.processedImageView.size = CGSizeMake(width, width);
    [self.processedImageView right:10 FromView:self.originImageView];
    [self.processedImageView topEqualToView:self.originImageView];

    CGFloat labelWidth = self.view.width - 100;
    self.firstFilterLabel.size = CGSizeMake(labelWidth, 20);
    [self.firstFilterLabel leftInContainer:10 shouldResize:NO];
    [self.firstFilterLabel top:10 FromView:self.originImageView];

    ... ...
}

getter和setter全部都放在最后

一个ViewController很有可能会有非常多的view, 如果getter和setter写在前面, 就会把主要逻辑扯到后面去, 这样不方面其他人查看. 写代码的时候按照顺序来分配代码块的位置, 先是life cycle, 然后是Delegate方法实现, 然后是event response, 最后才是getter 和setter.

每一个delegate都把对应的protocol名字带上, delegate写在一个区域

比如UITableViewDelegate的方法集就写上#pragma mark - UITableViewDelegate. 方便查找

event response专门开一个代码区域

所有的响应事件的处理都放在这个区域里面

关于private methods, 正常情况下ViewController里面不应该写

不是delegate方法的, 不是event response方法的, 不是life cycle方法的, 就是private method了. 正常情况下viewController里面一般是不会存在private methods的, 写成一个category或者做成一个模块. 这样一开始独立出来, 方便以后代码的复用.

在iOS开发中, MVC划分的正确姿势:

M应该做的事情:

1.给ViewController提供数据
2.给ViewController存储数据提供接口
3.提供经过抽象的业务基本组件, 供Controller调度

C应该做的事情:

1.管理ViewController的生命周期
2.负责生成所有的View实例, 并放入ViewContainer中
3.监听来自View与业务有关的时间, 通过与Model的合作, 来完成对应事件的业务

V应该做的事情:

1.相应与业务无关的事件, 并因此引发动画效果, 点击反馈等
2.界面元素表达

Reference

你可能感兴趣的:(关于View层的规范和组织)