描述
对于做开发的我们不知道对框架的重要性理解的有多深。我先谈谈我的感受。我最近因为某些原因换工作,接手了一个别人写的项目,于是地狱般的生活开始了。我大概说一下接手项目的几点让我无法忍受的点。
- 没有代码规范,写的随心所欲,想空几个空格就空几个,想空几个空格就空几个空格。
- 没有架构的概念,修改代码找不到对应的代码写在哪里。
- 基本的MVC的架构模式都不成型,没有model的概念,全是NSDictionary漫天飞,数据传递一条一条的传。
- table 的 cell 不复用,UI直接写在cellforRow的方法中,直接add到cell上,构建的cell里面空空如也。
- 平均每个VC里面的代码得有2k+,维护特别不方便,代码很难定位。
大概就列这几条其他的就不再吐槽了,首先我想说的是这样的代码谁接手了能受得了。于是我就决定在开发至于从新搭建一个框架。一方面是自己算是学习成长了,另一方面也把项目重新构建了。
好了回归正题,首先说一下MVC架构吧,这个我觉得的大家都知道,老生常谈的问题了我就不赘述了。有不是很清楚的小伙伴可以点上面的链接了解一下。
接下来我们说一下基于MVC搭建框架相关的东东。这是我参考别的文章中的架构图搭建的项目。
架构图:
架构原则:易读性、易维护性、易扩展性。
搭建目录结构
目录如图,从上到下这样搭建App的目录结构。用pod管理第三方的框架,部分进行封装,应对项目中的需求。降低耦合度并且节省了手动配置引入各种库的麻烦。
文件详解:
1、AppDelegate是应用的代理,应用级的事件都委托它处理,包含启动退出、推送等事件,初始化,以及IM、支付等第三方的回调,这使得AppDelegate内代码庞大,错综复杂,十分不利于阅读和维护,因此新增一个AppDelegate+AppService类别,用来处理生命周期之外的业务,AppDelegate作为事件入口,具体实现直接调用类别里的方法,为AppDelegate减负。
2、我搭建的这个是分为首页、科普、消息、我的四个模块。每个模块是按着MVC的架构搭建的,Resource是用来存储当前模块中需要用到的资源。Other是用来存储一些其他的资源,如果你想做分散是网络请求的话就将这文件夹改名为Service。然后将网络请求的文件放在这里。
3、Manager的定义是全局基础服务,通常使用类方法或者单例来实现,主要包含对应用、用户的管理和服务,例如网络状态监听,广告页应用介绍页,统计单例等;用户快速登录退出操作以及登录状态的获取等。
4、Utils文件夹内主要包含全局通用工具,来源于对三方框架的二次封装,或是自己写的工具类。
5、Base文件夹用来存放项目的基类,基类作用包含一些定制化的内容,例如页面样式,空数据页面等,使用基类来实现,可以统一控制,利于维护,减少冗余。有写不需要的可以删除掉。
6、放一些第三方的类库,有一些pod中没有的。或者自己自己封装的类,还有的需要我们手动修改里面源码来满足项目需求的类。
7、项目中通用的全局宏定义,我暂时定义了四个可以根据需求添加。
UtilsMacros:通用的工具宏,如:屏幕的宽高,版本的判断,机型的判断,计算nav,tab,statusBar的高度等。
URLMacros:关于项目中接口的宏,正式环境,测试环境的域名,还有个接口的路径。方便统一管理和维护。
FontAndColorMacros:项目中常用的字号,色值,颜色的十六进制转换等,字体的自重定义。
KeyMacros:第三方库的key,和一些通用的关键key,通知的key。
8、资源文件,系统中通用的一些资源可放在这个文件夹中。但是icon的资源要放在Assets中管理。因为这里面可以对相应的icon做一写处理,比如:设置图片的缩放,可重复复制的区域等。就是 Show Slicing或Show OverView
,不了解这块的可以点击直通车☝️。
9、CocoaPods是iOS项目的依赖管理工具,开发的一般都知道这个我就不过多赘述了。
总结
项目中还有好多细节的内容没有填好后期会不断的完善,大家有啥意见可以尽情的提出来必虚心接受。也可以推荐好用的库给我哦。另外说一下YYKit是非常好用且全面的组件库,遇到问题先去里面找一找,也许会有惊喜哦。后期我会上传demo。欢迎start。