搭建项目的目录
项目目录
├── ThirdLib(三方库)
│ ├── SDWebImage
│ └── AFNetworking
├── Framework(自己封装的类库)
├── General(通用类目录)
│ ├── Class(通用的类,比如自定义父类)
│ └── Helper(通用辅助方法)
├── Main(程序单一入口,仅放AppDelegate区分其他文件)
│ ├── AppDelegate.h
│ └── AppDelegate.m
├── Model(数据模型类目录)
│ ├── Macro(宏定义目录)
│ ├── BLL(业务逻辑层目录)
│ ├── DAL(数据访问层目录)
│ ├── Entity(自定义实体目录)
│ ├── Request(网络请求类目录)
│ ├── Location(定位服务类目录)
│ └── Socket(Socket类目录)
├── Module(功能模块目录)
│ │
│ ├─── ModuleA
│ │ ├── ViewControllerA.h(视图控制器头文件)
│ │ └── ViewControllerA.m(视图控制器m文件)
│ ├── ModuleB
│ ├── ModuleC
│ ├── ModuleD
│ └── ModuleE
└── View(视图类目录)
└── MyTestView
一个不好的view层架构,主要原因有以下5种:
- 代码混乱不规范
- 过多继承导致的复杂依赖关系
- 模块化程度不够高,组件粒度不够细
- 横向依赖
- 架构设计失去传承
ViewController的代码结构
- 定义property属性
- #pragma mark - life cycle(viewDidload, viewWillAppear ...)
- *#pragma mark - UITableViewDelegate *
methods...- #pragma mark - CustomDelegate
methods...- #pragma mark - event response
- #pragma mark - private methods
- #pragma mark - getters and setters
要点如下:
1.所有属性使用getter和setter
勘误1:viewDidLoad只做addSubview的事情,然后在viewWillAppear里面做布局的事情,最后在viewDidAppear里面做Notification监听之类的事情.属性的初始化,就交给getter去做;
2.getter和setter全部放在最后面;
3.每一个delegate都把对应的protocol名字带上,delegate方法不要到处乱写,写到一块区域里面去;
4.event response专门开一个代码区域
所有的button,gestureRecognizer的响应事件都放在这个区域里面,不要到处乱放
5.关于private methods,正常情况下viewConroller里面不应该写,这个private methods一般是用于日期换算、图片裁剪啥的这种小功能。这种小功能要么把它写成一个category,要么做成一个模块,哪怕这个模块只有一个函数也行.
关于View的布局
写view的时候,用frame或者autolayout,如果没有精心设计过,布局一定惨不忍睹!
直接使用CGRectMake的话可读性很差,光看几个数字也无法知道,view与view之间的位置关系.用autolayout可读性稍微还好,但生成constrain的代码是在太长,代码观感不太好.
autolayout这边可以考虑使用Masonry,代码的可读性就能好很多.如果还有使用Frame的,可以考虑使用这个框架HandyAutoLayout
何时使用StoryBoard,何时使用nib,何时使用纯代码写view
提倡用code去画view而不是storyboard
网友评论