關于 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