关于 ios 项目架构 网上说的很多 ,mvc,mvp, mvvm, viper,但是很少有人 把整个项目里的把整个项目结构 拿出来说事,总是说,每个项目不一样 。 我想骂人, 很多项目其实 有很多共同之处的。我把我理解的项目结构贴出来,大家提提意见。from 荔枝
.
├── LZStructure
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── Category
│ ├── Info.plist
│ ├── Macro
│ ├── Main
│ ├── Resource
│ ├── SceneDelegate.swift
│ ├── Sections
│ │ └── Home
│ │ ├── Controller
│ │ ├── Model
│ │ ├── Presenter
│ │ ├── View
│ │ └── ViewModel
│ ├── Tool
│ ├── Vendor
│ └── ViewController.swift
├── LZStructure.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── swiftpm
│ │ │ └── configuration
│ │ └── xcuserdata
│ │ └── lizhi.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
│ └── xcuserdata
│ └── lizhi.xcuserdatad
│ └── xcschemes
│ └── xcschememanagement.plist
├── LZStructureTests
│ └── LZStructureTests.swift
└── LZStructureUITests
├── LZStructureUITests.swift
└── LZStructureUITestsLaunchTests.swift
* AppDelegate:
AppDelegate是程序入口,程序启动和显示逻辑都定义在内部,主要可以让开发人员快速找到代理文件并了解程序从启动到显示过程,也可以快速进行一些初始化测试。
*Resource
Resource: 此目录主要存放一些项目资源文件,如项目切图、音频、视频、coreData数据等。
* SupportingFile
SupportingFile: 项目配置文件。Info.plist、main.m、pch文件。
*Category
Category: 项目分类文件。
*Macro
Macro: 项目全局头文件、全局宏和常量
*Network
Network:网络相关 如 Moya封装
*Main
Main: 项目主要文件,全局共用文件以及一些基类
*Tool
Tool: 项目工具类,如网络请求工具,缓存工具,app管理工具等
*Vendor
Vendor: 存放项目需要手动引入的第三方库。
*Sections
Sections: 项目功能模块分组
可按底部tabbar对应选项卡划分,若有登录、新特性等比较大的功能,也可划分为一个模块。 若果模块内的子模块功能比较多,也可在其内部划分一个子模块。 每个模块内部都分4个文件夹,分别存放对应的Controller、Model、View、Presenter。 据我了解,大部分企业iOS项目都会选取类似这种架构模式。个人觉得此架构较为清晰,可读性好,并且每个模块文件夹相对独立,开发人员相对专注开发自己的模块。
个人认为 Controller、Model、View、Presenter ,比 Controller、Model、View、ViewModel 更易操作,因为 有的时候 逻辑比较复杂 ,用Presenter 集中处理 逻辑 可读性更强。
以上为本人从事iOS开发以来总结的一些项目架构经验,如有不足或者可改进之处可提出修改
有个疑问,实际项目中,MVVM 把复杂逻辑处理 放到哪里?是 ViewModel 文件夹 下吗?
参考网址:http://t.zoukankan.com/kunggh-p-5596752.html
代码 :https://github.com/lizhi0123/LZSwiftDemos/tree/main/LZStructure