美文网首页
关于View层的规范和组织

关于View层的规范和组织

作者: VanChan | 来源:发表于2016-07-05 16:37 被阅读37次

    前言

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

    要点如下:

    所有的属性都使用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层的规范和组织

          本文链接:https://www.haomeiwen.com/subject/dpehjttx.html