入职了一家公司,刚好处于项目启动阶段,花了一周时间搭建了项目框架,现在总结一下。
框架设计目的
软件系统的框架设计跟盖房子搭框架原理相似,根基打牢了,框架搭好了,后续就是往里面填业务逻辑了。框架系统的搭建所遵循的原则如下
- DRY即Don’t repeat yourself
- Kiss即Keep It Simple,Stupid
- 六大设计原则(Solid)
让工程架构更简洁易懂,隐藏复杂的细节提供易用的API
- 框架设计模式
这里项目采用的MVVM的框架设计模式,因为VM作为中间层,可以适应不同业务层的数据逻辑处理,从而提高Controller作为View的复用率。
ViewModel其实是View的数据层的影子,它的神奇之处在于这个影子是可以被改变然后映射到实体上。这个过程中ViewModel抽象出UI的数据,然后将这些与UI上的属性进行绑定
实现
APP业务无关的功能模块进行封装
- 常用分类Category
为了提高可复用性,通过将一些通用(Kit、Foundation相关)业务无关的功能封装成私有库,这里用私有Pod来管理,避免开发其他App时重复工作,暂时就封装了两个私有库,一个Kit,一个Foundation,两个库的实现都是借鉴YYCategories里面的功能,因为作者写得实在太好,无法超越….同时将一些常用的与业务无关的宏定义也分别放在了私有库里面了。
网络层
公司都会有自己的网络层,集中型或者分散型,目前主流的是借鉴猿题库的YTKNetwork,把每个网络请求实例化,便于定制缓存,请求管理和依赖,这里我借鉴的是网上的一个基于MVVM的网络框架,也是将每个请求实例化,通过代理的方式(没有使用Block捕获对象导致对象延迟释放问题),定义一个请求的基类,基于基类又封装了一个分页的请求基类后续会将一些通用的自定义View封装成库
PCH文件
PCH的作用:
- 存放一些全局的宏(整个项目中都用得上的宏) 一个用来定义APP相关的主题类(UIColor,UIFont)宏文件,一个第三方参数的宏文件
- 用来包含一些全部的头文件(整个项目中都用得上的头文件)
- 能自动打开或者关闭日志输出功能
Base基类
继承作为一种强关联的高耦合方式,在开发的时候是要慎用的,一般都是建议使用组合方式进行替换,基于OC的语言特性,可以使用相应的分类实现。(实际中组合(Composition)往往结合接口、委托(delegation)这两种技术手段来解决继承的问题 )
继承是一种is-a的关系,而组合是一种has-a关系
- BaseViewController
1 | @interface WSFBaseViewController : UIViewController |
- LoadPageView
每个页面都会有NoData,网络故障等通用状态显示页面,这里单独封装成一个对象