iOS 应用架构

搭建项目的目录
项目目录
├── 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种:

  1. 代码混乱不规范
  2. 过多继承导致的复杂依赖关系
  3. 模块化程度不够高,组件粒度不够细
  4. 横向依赖
  5. 架构设计失去传承

ViewController的代码结构

  1. 定义property属性
  2. #pragma mark - life cycle(viewDidload, viewWillAppear ...)
  3. *#pragma mark - UITableViewDelegate *
    methods...
  4. #pragma mark - CustomDelegate
    methods...
  5. #pragma mark - event response
  6. #pragma mark - private methods
  7. #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

你可能感兴趣的:(iOS 应用架构)