阅读 766

iOS架构——项目组织架构

关键字:项目组织架构 CocoaPod + 多项目级联 + xib + MVVM
整体项目结构:

ProjectApp   项目app project
    Vendors    第三方.a、.framework库或源码
    Resources  项目静态配置文件
    Database    数据库文件夹,如CoreData
    Component  此项目特定的组件
        Base    此项目特定的基类,此基类基本上都要集成ComponentUI里的Base,如BaseNavController, BaseVC, BaseTabBarController
        Util    此项目特定的工具类
        UI    此项目特定的UI
    Common    此项目特定的公共类
        View   视图
        WebVC  公用的WebViewVC,需要提供接口出来,不建议直接调用
        Pay   支付,如微信、支付宝支付
        Push  推送,如极光、友盟
        DataCache  项目数据缓存,如图片缓存类
        BugAnalysis   app闪退奔溃统计
        DataStatistic   用户数据行为埋点统计,如友盟、极光的数据统计
        Map 高德、百度地图
        Bluetooth 蓝牙
        Wifi Wi-Fi
        Styles   整体风格,存放颜色、字体、边距
        CommonImport.swift   导入常用的库,这样就不用每次用的时候都需要导入了
    Service   封装所有接口
    Modules   项目模块
        Home   首页模块
           VC   存放VC、xib
           Model   业务逻辑
           View   视图
           Entity   普工实体模型,即POJO
        Mine  我的模块
        Main  主模块
        Login  登录模块
    Assets.xcassets  切图
        AccentColor
        AppIcon
Pods
    Podfile
ComponentNetwork  对第三方网络库对封装,如Alamofire
    AFService
    CPService.swift
ComponentUI    通用常用UI库的封装
    Base
    AlertView
ComponentUitls  通用常用工具类库
    App
    Array
    Color
    Date
    Device
    File
    Image
    Json
    Lanuage
    Object
    Path
    String
    Validate
    View
复制代码

storyboard、xib的取舍
不采用单个或多个Storyboard,采用一个VC对应一个XIB方式,如果只需要适配iOS 13以后,可以直接使用swiftUI。storyboard很臃肿,而且打开特别慢,页面视图多了后很难查找,每次创建VC都需要通过storyboard,不够简明,团队编写极易代码冲突。也不建议界面UI实现都采用代码编写,纯代码编写效率低,维护困难,布局麻烦,代码量多。当然纯代码布局性能有提高,毕竟加载xib或storyboard需要消耗一定资源。

代码封装

  1. base类,主要分类三类
  • 所有项目都通用都base,放到ComponentUI库base文件夹,主要封装一些打印信息、常用VC、View、UILabel、UIImage等功能
  • 本项目特定的base,继承ComponentUI库base,定制项目通用的base,如通用导航栏navigationBar、tableView下拉刷新上拉加载更多等
  • 某些页面共性封装,如同类产品详情页面、同类列表页面等
  1. 建议所有第三方库都需要再封装一层
  • iOS编程语言、系统更新都很快,第三方库不一定能及时更行
  • 随着项目的扩张,某些第三方库已经无法满足需求,需要找替代品
  • 第三方库功能过多,需要封装出项目特定的API接口
  1. Assets.xcassets切图
    一般每个模块创建一个文件夹,然后再增加一个Common公共文件夹,尽可能切成等比例方形,某些特定场合才切成不等比图片,命名规则:统一命名成英文小写,多个单词间由下划线_分隔,同一项目不能出现同名切图,格式:模块名/页面名+功能名+状态名,如登陆页面的密码眼睛名称为login_account_enable.png,有条件的团队可以统一全部使用矢量图,如IconFont等
  2. 架构适用性
    此接口适合中型app项目,小型项目可以把ComponentNetwork、ComponentUI、ComponentUtils移植到ProjectApp的Component下,直接一个项目project+Pods就可以。大型项目的话可以把ProjecctApp里Modules下每个模块单独作为一个project,Common、Service、Database、Vendor各作为一个project,然后ProjectApp依赖各个project模块。如果需要对外提供SDK的同样需要再抽离出project。
  3. 架构分层
    不要被MVC、MVVM、VIPER等架构锁死,这些架构只是提供一些思路,学会了需要灵活运用,总结归纳,适合自己的才是最好的

项目源码:codechina.csdn.net/ios1/projec…

相关面试资料

收录

文章分类
iOS
文章标签