https://www.zybuluo.com/chenhongen/note/1387726
# iOS项目介绍及说明
---
## 一、整体架构
### 1、四层架构
#### 界面层
> 例如:赛事列表界面、社区界面、我的界面、消息界面、设置界面、话题主页界面等等
#### 业务层
> 例如:加载帖子列表数据、处理帖子列表数据、导航栏颜色变化、帖子详情交互逻辑、发帖、查看图片、播放视频、消息跳转、banner跳转、上下拉操作、输入框键盘处理、推送、分享、埋点等等
#### 网络层
> 例如:AFN二次封装、https适配、图片视频上传下载、网络状态监控等等
#### 本地数据层
> 例如:sql3.0数据库本地化存储、偏好设置存储、归档等等
### 2、MVVM
#### MVC&MVVM的选择
- 项目中没有使用严格意义上的MVVM,苹果推荐使用MVC,优点是View、Model可以重复利用,可以独立使用
- 但是MVC也有缺点,Controller的代码过于臃肿,所以我们对苹果的MVC做了一些优化,对Controller进行瘦身,将View内部的细节封装起来了,外界不知道View内部的具体实现
- 然后仅仅这样做也是有缺点的:View依赖于Model,所以我们最终采用了MVVM模式,将View/View-Controller与Model分离开,View不依赖于Model,两者之间通过ViewModel进行通信,ViewModel会处理一部分业务逻辑,分担Controller的压力,解决Controller的代码过于臃肿的问题
### 3、设计模式
#### 原则
可重用代码、让代码更容易被他人理解、保证代码可靠性
#### 项目中常用的三大设计模式
1. 创建型模式:对象实例化的模式,用于解耦对象的实例化过程
> 单例模式、工厂方法模式
2. 结构型模式:把类或对象结合在一起形成一个更大的结构
> 代理模式、适配器模式
3. 行为型模式:类或对象之间如何交互,及划分责任和算法
> 观察者模式、命令模式
---
## 二、项目结构
介绍项目结构主要是为了让其他同事能通过文档快速熟悉项目,这里只介绍核心的类
目前为止项目主要分为四大target、八大模块
### 四大target
#### Bloom
Bloom宿主项目
#### NotificationServer
NotificationServer 推送服务处理
#### NotificationViewController
NotificationViewController 推送自定义处理
#### Pods
Pods管理三方库(暂且把它归为target,单独管理所有的三方库)
### 八大模块
- Main
- Login
- Home
- Community
- Me
- Message
- Service
- Other
#### Main
Main顾名思义,程序的主入口
- 核心类 SKTTabBarController,展示三个tab
- 核心基类族 Base
- BaseControllers:包括对Navigation、NavUIBaseView、TextView、RequestBaseView、BaseView、TableView、StaticTable、CollectionView、WebView、RefreshTableView、RefreshCollection封装的控制器
- BaseView:以上VC使用的View
- BaseModels:以上VC使用的Model
- WebViewController:所有的webView均在此VC中统一处理,如有必要,可以继承此类单独处理业务逻辑
#### Login
- Controller:包括登录相关所有界面
- Tools:SKTUserManager、SKTUser,存储用户登录信息
#### Home
- Controller/View/Model/ViewModel:该模块承载首页相关所有界面/模型/自定义控件,以及今后首页的扩展界面(消息单独拎出来作为一个独立模块)
#### Community
- Controller/View/Model/ViewModel:该模块承载社区相关所有界面/模型/自定义控件,包括发帖、话题等,以及今后社区的扩展界面
#### Me
- Controller/View/Model/ViewModel:该模块承载我的相关所有界面/模型/自定义控件,包括设置等,以及今后我的扩展界面
#### Message
- Controller/View/Model/ViewModel:该模块承载消息相关所有界面/模型/自定义控件,以及今后消息扩展界面
#### Service
该模块是网络层的处理
目前分为七大类
- NetWork
- BaseRequest 请求数据管理核心
- BaseResponse 响应数据管理核心
- RequestManager 网络请求管理核心
- SetCookies
- Publish
- Login
- Home
- Message
- Community
- Me
除了NetWork是对网络二次封装外,其他六个都是具体模块的网络请求接口,可以在具体的接口中进行个性化处理,例如:本地化存取,字典转模型,数据筛选等等
#### Other
Other目前分为四大类
- Const 常量 宏定义:切换线上/测试/开发环境、管理颜色、 设备常量等文件
- Category 分类:系统api类扩展 例如:快速为控件添加事件、消息红点、Frame拓展、快速获取当前控制/导航控制器、快速下载图片并设置头像、暴力点击拦截等等
- Tools 自定义控件或者自定义管理文件 例如:支付、广告、欢迎页、tagBtn、空白界面、版本升级、数据库管理、友盟管理
- Vender 三方库或者三方插件
---
原文地址:https://www.cnblogs.com/chglog/p/10449968.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。