公司目前iOS项目的架构及层次设计

公司iOS项目目前框架和架构层次总结:数据库

       目前主要使用的架构为MVVM。固然为了便于管理,逻辑分层和物理分层是统一的,通常按照Model、ViewController、ViewModel来分,ViewController下面能够包括对应的UIView;而后各个层次下面按照业务分类,再建立不一样的分层,这是一种。固然还有另外的一种,就是先根据业务分类,而后再在各个业务分类下面设置Model、ViewController、ViewModel层。这两种方式在项目中都用到过,不过长远看来建议使用第二种,这样可以更好的切合业务,一目了然。ViewModel主要是为了构造轻量级的ViewController而创建的,这样ViewController中不用关心数据获取,数据组装等功能;从而使得ViewController更加专一于逻辑的处理。目前ViewModel主要做用包括:网络数据请求、组装数据功能、以及一些数据的转化。同时,为了便于使用,项目中有专门的层次创建了一些工具类,Category,和widgets,这样既可以知足某些方面的面向切面编程,又能加强扩展性。关于设置Navigation导航的问题,主要是自定义了ViewController的父类,而后在父类中,自定了返回按钮等其余的功能。为了项目的维护方便,项目中没有使用storyboard故事版,而是直接在Appdelegate中设置rootViewController。若是遇到登陆相关功能则根据NSUserDefaults的数据设置LoginVC;若须要加入广告则,设置WaitingVC,而后在WaitingVC中加入倒计时及对应的广告图片,当倒计时结束后则设置新的rootViewController。项目中涉及到的数据库的操做都使用的是FMDB,而后再对其进行进一步的封装成公用的工具类。在全部的项目中为了保存数据,增长了对缓存Cache的处理,并创建了相关的工具类。同时引入了比较成熟的第三方的框架如:FMDB、AFNetworking、SVG、MJExtention、MJRefresh等等,适当的减小了ViewController中与逻辑无关的处理,提升了代码的复用性。可是存在的问题是,UIView的复用性并非很高,出去自定义的一些widget,更多View要结合,ViewController中的逻辑进行处理;同时View和Model绑定比较紧密。接下来准备研究ReactiveCocoa来解决这方面的问题。编程