大家好,我是K哥。一名獨立開發者,同時也是Swift開發框架【Aquarius】的作者,悦記和愛尋車app的開發者。
Aquarius開發框架旨在幫助獨立開發者和中小型團隊,完成iOS App的快速實現與迭代。使用框架開發將給你帶來簡單、高效、易維護的編程體驗。
引言
在iOS開發中,面對日益複雜的業務需求和團隊協作挑戰,如何構建可維護、可擴展的架構?Aquarius框架通過'模塊化 + MVVM + 洋葱開發法'的鐵三角模式,為獨立開發者和中小團隊提供了一套完整的解決方案。
模塊化開發
項目工程結構的兩種類型
我們在開發時,根據項目的複雜程度,工程結構一般建議採用集成化和模塊化兩種方式。
集成化:所有功能均在主工程中完成
模塊化:將功能進行拆分、梳理,並將不同功能規劃到不同的模塊中。主工程由各個模塊整合後,形成項目的整體工程結構。
無論是集成化開發還是模塊化開發,本身並沒有優劣之分,需要根據實際情況決定。
K哥整理了一個表格來展現兩種方式的不同之處:
| 特性 | 集成化開發 | 模塊化開發 |
|---|---|---|
| 適用項目 | 功能簡單、1-3人小團隊、快速迭代 | 功能複雜、多人協作、長期維護 |
| 優點 | 簡單、靈活、開發速度快 | 架構清晰、職責分明、易於複用和測試 |
| 缺點 | 耦合度高、後期維護成本高 | 前期設計成本高、有一定學習曲線 |
| 工程管理 | 單一工程 | Workspace + 多Framework |
不同類型適合哪種項目
一般,功能較少或幾人完成的項目建議採用集成化開發方式。
當功能較少或1~3人便可完成時,需要的是更加簡單、靈活、能夠快速推進項目進度的方案,所以集成化相對較適合。
當功能較多或需要多人完成時,需要的是更統一的項目結構、更清晰的功能規劃、更合理的人員分配。所以模塊化相對較適合。
集成化工程結構
集成化的開發方式相對較簡單,但是從工程結構角度看一樣需要具備清晰、易懂等要求。
K哥在這裏也提出一個工程結構的方案,大家可以參考。如下圖所示:
- thirdparty:存放三方源碼
- Cell:存放Cell
- Controller:存放Controller
- Model:存放Model
- Module:對外提供的接口
- Service:服務層代碼
- Store:存儲層代碼
- View:存放View
- Supports:存放靜態變量。例如:通知ID、綁定ID、三方服務的Key等
- ViewModel:存放ViewModel
當然,這些只是最簡單的工程結構。不同公司或者不同的開發者都有自己的工程結構方案。如果你還沒有的話,可以參考K哥提供的這個方案。
模塊化開發
模塊化概念
模塊化不是一個新的概念了,但是在iOS的項目開發中,尤其是在中小型團隊和獨立開發者中,受到成本、團隊協作效率等因素的限制,往往應用較少。
但是,我們知道,每個項目幾乎都是按照螺旋曲線不斷向上的方式去迭代的。這也就意味着,每個app的功能會隨着版本的迭代,不斷的增加。
這時,就需要考慮功能迭代、團隊協作以及如何釋放團隊潛力等諸多問題。
模塊化正式解決這些問題的不二之選。
模塊化開發在中大型項目中的意義
首先,模塊化在版本迭代過程中起到了平衡各模塊的功能佈局以及清晰的展現未來產品的發展方向的作用。
其次,模塊化可以使多個團隊共同維護同一個app有了可實現的方案。不同團隊維護自己負責的模塊,最後主工程只是起到了整合、發佈的作用。
最後,不同團隊都有自己不同的目標,彼此也是競爭關係,這就大大的調動了人員的積極性,團隊更多的潛力被釋放出來,有助於app向着良性的方向發展。
iOS的項目如何實現模塊化開發
那麼iOS的項目如何實現模塊化呢?
這裏K哥提出一個方案,大家可以借鑑。
如果有更好的方式,也可以評論區咱們一起探討。
- 通過workspace來管理你的項目
你需要在xcode中建立workspace來管理你的項目。
點擊File-New-Workspace。如下圖所示:
選擇保存路徑之後,點擊Save。如下圖所示:
- 創建Framework
點擊保存之後,Xcode將打開新的窗體。
同樣,點擊上方的File-New-Project
點擊iOS,在Framework & Library分欄中選擇Framework。如下圖所示:
點擊Next,在彈出的窗體中,輸入必要信息。並點擊Next。如下圖所示:
在彈出的窗體中一定要選擇你創建的Workspace。然後點擊Create。如下圖所示:
- 選擇靜態庫
創建好Framework之後,
Framework創建好之後,我們需要點擊TARGETS,點擊Framework,在右側窗口中選擇Build Settings,找到Linking - General,找到Mach- O Type,將Dynamic Library調整為Static Library。如下圖所示:
好了,現在你已經創建好了你的第一個模塊。
接下來,你可以根據你的實際需求創建多個你自己的模塊。
Xcode的模塊化方案非常的簡單。有了模塊化之後,當APP的不同模塊由不同團隊負責。或者你是一名獨立開發者,你的APP今後需要交給多個人維護時,不同的團隊,或不同的人,只需要拿到他們自己負責的模塊源碼即可,那麼你的項目工程將變得無比整潔與安全。
MVVM設計模式
MVVM設計模式也是一個老話題了。之所以Aquarius開發框架採用這種設計模式,是因為框架本身建議大家在開發時更多的使用ViewModel來減輕Controller層的壓力。這對項目開發過程中的多人協作與代碼易維護性具有至關重要的作用。
MVVM解決什麼問題
我們知道,大家都習慣將代碼寫在Controller中,隨着功能的不斷迭代,代碼勢必會不斷增加。也就是説Controller層的代碼就會越來越多。這對代碼的Review造成了極大的複雜性。
所以,我們就需要通過MVVM設計模式的ViewModel來緩解Controller的壓力。
另外,即使沒有ViewModel層,我們也應該將邏輯處理部分的代碼與Controller層分離。這樣,後期的工程代碼才能易於維護。
Aquarius開發框架對MVVM設計模式的支持
大家都知道,要想實現MVVM設計模式,其實是非常簡單的,我們只需要創建一個ViewModel文件即可。
但是,隨着文件的創建,我們勢必需要關注MVVM設計模式中,各層之間如何來解耦的問題。
傳統的方式,可以通過Delegate實現。
Aquarius開發框架提供了更多的解耦方式,你可以通過通知、數據綁定等多種方式實現解耦。
Aquarius開發框架提供了:
- AViewController,它是Controller層的基類
- AViewModel,它是ViewModel層的基類
- AView,它是View層的基類
AViewController,提供了埋點管理、導航條管理、分層管理(洋葱開發法)、主題管理、日誌管理、熱更新管理。
AViewModel,提供了分層管理(洋葱開發法)、Delegate管理、通知管理、數據綁定管理、日誌管理、熱更新管理。
AView,提供了鍵盤管理、分層管理(洋葱開發法)、Delegate管理、通知管理、數據綁定管理、日誌管理、熱更新管理。
請不要着急,本篇文章,我們只簡單介紹Aquarius開發框架各層基類提供的能力,在後續的文章中,我們會逐個介紹各個功能如何使用。
如何基於MVVM設計模式開發項目
通過以上的介紹,我們可以瞭解到,創建一個有效的界面,至少需要包含3個類文件,他們分別是Controller(繼承AViewController)、View(繼承AView)和ViewModel(繼承AViewModel)
代碼示例如下:
TestVM.swift
import Aquarius
class TestVM: AViewModel {
//viewModel層處理邏輯的代碼
public func click() {
//按鈕點擊後執行的操作
...
}
...
}
TestView.swift
import UIKit
import Aquarius
class TestView: AView {
//初始化UI控件
private let testLabel: UILabel = A.ui.label
public let testButton: UIButton = A.ui.button
...
//快速組裝UI控件
override func a_UI() {
super.a_UI()
addSubViews(views: [
testLabel,
testButton
...
)
}
...
}
TestVC.swift
import Aquarius
class TestVC: AViewController {
private let a_view: TestView = TestView()
private let viewModel: TestVM = TestVM()
override func a_UI() {
super.a_UI()
addRootView(a_view)
}
override func a_Event() {
super.a_Event()
a_view.testButton.addTouchUpInsideBlock { [weak self] control in
//按鈕點擊事件
self?.viewModel.click()
...
}
}
...
}
這時一個最簡單的基於Aquarius開發框架實現MVVM設計模式的代碼結構。
任何複雜的app界面,和處理邏輯,都是基於此擴展出來的。
開發鐵三角
一個開發項目的成功,需要從方法 - 架構 - 模式三個方面來探討。
先進的方法+穩固的架構+成熟的模式就可以形成開發鐵三角。從而才能保證項目內外兼修。
構建應用的穩固基石
在複雜的應用開發中,單一的技術或模式往往力有未逮。Aquarius開發框架以 “洋葱開發法”為綱領,“模塊化”為骨架,“MVVM”為神經的鐵三角模型,從宏觀到微觀,全方位保障代碼的質量、可維護性和開發效率。
1. 宏觀綱領:洋葱開發法
- 定位:核心方法論與架構哲學。
- 作用:它規定了整個應用的代碼結構像一顆洋葱,層次清晰。領域模型位於最內層,不受任何外層(如UI、數據庫)變化的影響。這是保證應用核心業務邏輯純粹和穩定的頂層設計。
- 類比:建築的整體設計藍圖,規定了承重牆、管線走向等根本結構。
2. 中觀骨架:模塊化開發
- 定位:項目組織模式與工程架構。
- 作用:在“洋葱”的每一層中,我們使用模塊化將系統拆分為獨立的業務模塊或功能單元(如“用户模塊”、“支付模塊”)。每個模塊都可以內部採用洋葱分層,並對外暴露清晰的接口。這解決了團隊協作、代碼複用和部署複雜度的問題。
- 類比:將大樓劃分為不同的功能區域(住宅區、商業區、車庫),每個區域可以獨立施工和管理。
3. 微觀神經:MVVM設計模式
- 定位:前端交互模式與表示層架構。
- 作用:在表示層,當我們具體開發一個UI界面時,採用MVVM模式。它負責協調視圖的展示、用户的交互和底層數據(可能來自洋葱的領域層)的同步。它完美地解決了視圖與業務邏輯的耦合問題。
- 類比:每個房間內的智能家居系統,它負責接收指令(用户操作)、控制設備(更新視圖)並反饋狀態(數據綁定),但不管牆壁是如何建造的(模塊化)或大樓的地基在哪(洋葱核心)。
鐵三角的協同工作流
- 首先,運用MVVM設計模式進行頂層設計,劃分出領域層、應用層、基礎設施層和表示層。
- 接着,運用模塊化將整個系統按功能垂直切割。每個模塊都是一個小的“洋葱”,內部包含自己的層次。
- 最後,在MVVM各層中,運用洋葱開發法來精細化管理數據流向和用户交互。ViewModel會調用洋葱應用層的服務來獲取數據,Model可能就是洋葱領域層的實體或數據傳輸對象。
總結
“以‘模塊化’分而治之,用‘MVVM’精雕細琢,所有這一切,都在‘洋葱開發法’規定的秩序下和諧統一。”
立即體驗Aquarius:
- ⭐ Star & Fork 框架源碼: GitHub - JZXStudio/Aquarius
- 📱 下載示例APP: 悦記 | 愛尋車
- 💌 聯繫與反饋: studio_jzx@163.com