
組件化開發(fā)系列:
(一)iOS組件化開發(fā)架構(gòu)設(shè)計(jì)思考
(二)iOS組件化開發(fā)實(shí)施一期文檔
前言
???我們?cè)谡勀K化、組件化,中心路由,響應(yīng)式編程,三層、四層架構(gòu),依賴注入等概念的時(shí)候,出發(fā)點(diǎn)是什么?應(yīng)該是項(xiàng)目管理上的穩(wěn)定性,可維護(hù)性,開發(fā)效率,需要從業(yè)務(wù)中提煉出更抽象的結(jié)構(gòu)思想,不要為了架構(gòu)而架構(gòu),流于形式。軟件項(xiàng)目開發(fā)的整個(gè)周期內(nèi)都應(yīng)該考慮這些問題,而且是持續(xù)性的,關(guān)鍵是我們一定要有設(shè)計(jì)思想、負(fù)責(zé)的態(tài)度、認(rèn)真的執(zhí)行力。具體有必要做哪些,可以根據(jù)實(shí)際情況,做好預(yù)案,逐步實(shí)施。
???其實(shí)好多事情,我們也可以借勢(shì)去推動(dòng),幫助公司和個(gè)人成長(zhǎng)。項(xiàng)目的重構(gòu),資源的重組,也是資源和權(quán)利的再分配。
一、目標(biāo)
梳理項(xiàng)目工程結(jié)構(gòu),抽離基礎(chǔ)層和中間層。
保證所有第三方庫管理、基礎(chǔ)庫從主工程抽出,可獨(dú)立編譯,減少編譯時(shí)間。
梳理提供的功能和使用方法,便于各業(yè)務(wù)模塊的調(diào)用。
讓團(tuán)隊(duì)成員更熟悉公司項(xiàng)目,減少重復(fù)造輪子,提高開發(fā)效率。
二、實(shí)施計(jì)劃
1、實(shí)施說明
- 專門建立一個(gè)組件化的分支組,組件化的主分支和多個(gè)改動(dòng)分支。組件化的主分支,以周為單位,進(jìn)行review和合并代碼使用,并標(biāo)記tag和提交測(cè)試,以便改動(dòng)可以隨版本發(fā)布,建議專人負(fù)責(zé)管控。
- 每次都小步改動(dòng)和改動(dòng)單一性(如調(diào)整文件路徑、修改工程名稱、改動(dòng)了Pods等單獨(dú)進(jìn)行),并及時(shí)編譯,驗(yàn)證改動(dòng)是否正確,成功后提交。
- 盡量在不改動(dòng)代碼邏輯的情況下做調(diào)整。較大的改動(dòng),如修改了邏輯、移動(dòng)了某個(gè)庫到其他工程、改動(dòng)了Pods、刪除了某些文件,可以做些記錄或提交代碼時(shí)做詳細(xì)的說明,以便問題復(fù)查。
- 移動(dòng)文件時(shí),注意文件環(huán)境MRC/ARC的變化,如需要請(qǐng)盡量改動(dòng)為ARC。
2、項(xiàng)目工程定義
初步調(diào)整工程目錄結(jié)構(gòu)如下:
基礎(chǔ)層和中間層
Pods: 僅Pods管理的第三方庫。
DDManualThirdSDKs: Pods不能管理的第三方庫,對(duì)第三方進(jìn)行必要的封裝,集中做成私有庫的形式,再交給Pods管理。
DDDevelopLib: 自行封裝的私有庫,如系統(tǒng)類分類、數(shù)據(jù)處理類、通用UI組件、宏定義和常量定義等。做成私有庫,交給Pods管理。
業(yè)務(wù)組件層
DDEngine: 后續(xù)會(huì)把模型規(guī)整到具體模塊中,部分文件需要抽離到基礎(chǔ)層或中間層,其他暫時(shí)保持不變,后續(xù)抽離封裝網(wǎng)絡(luò)庫。
DDMIX_UI: 暫時(shí)保留,屬于三期。
ddDemo: 將其中的第三方庫、UILib、分類等,下沉到基礎(chǔ)層或中間層外,暫時(shí)保持不變。
基礎(chǔ)層中間層工程通用的目錄結(jié)構(gòu)
以DDManualThirdSDKs為例說明,目錄結(jié)構(gòu)如下:
DDManualThirdSDKs:工程代碼
CoreCode:核心代碼
Resources:需要的資源文件。
SupportingFiles:.pch, .plist等。
Frameworks:依賴的系統(tǒng)庫。
Products:編譯好的.a文件。
Pods:pods配置文件。
一二級(jí)目錄是標(biāo)準(zhǔn)配置,三、四、五根據(jù)需要自行配置。
調(diào)整要點(diǎn)
- 每個(gè)工程下都需要建立一個(gè)README.md 文件,寫明工程使用說明,后續(xù)交由指定人員,輪流負(fù)責(zé)管理。
- 每個(gè)工程除了依賴更底層庫外,都能獨(dú)立編譯,并無警告??,第三庫可以采用忽略的形式隱藏,自行編寫的代碼必須無警告。
- 文件路徑使用真實(shí)路徑,項(xiàng)目目錄和真實(shí)路徑一致,除了工程級(jí)的Frameworks、Products、Pods除外,禁止使用虛擬路徑。
參考擴(kuò)展文檔
1、iOS Workspace 多項(xiàng)目管理
2、iOS多個(gè)Target配置詳情操作
3、iOS工程目錄結(jié)構(gòu)的思考
4、CocoaPods進(jìn)階:詳解私有庫制作
5、iOS工程文件整理
3、整理三方庫統(tǒng)一Pods管理
把項(xiàng)目中散落的第三方庫都規(guī)整到Pods和DDManualThirdSDKs工程中,優(yōu)先Pods管理。
散落的第三方庫有:iflyMSC、libSunFlower、DDReader、YYText、MiaoZhen、NTalkerUIKitSDK、TalkingData、VoiceConvert、HPGrowingTextView(7年未維護(hù)了,局部使用,可以內(nèi)化為自行代碼)等。
DDManualThirdSDKs工程 CoreCode文件夾下目錄結(jié)構(gòu):
CoreCode:核心代碼
YiGuanFangZhou:YiGuanFangZhou 代碼區(qū)。
PackageLayer:YiGuanFangZhou 封裝(根據(jù)需要封裝)。
SDKCode:YiGuanFangZhou SDK代碼。
QQSDK:QQSDK代碼。
PackageLayer:QQSDK 封裝(根據(jù)需要封裝)。
SDKCode:QQSDK代碼。
把pod管理第三方庫有自行封裝的代碼集中到一個(gè)文件下參考目錄結(jié)構(gòu):
DDPodSDKsPackage:工程代碼
AFNetworkingPackage:AFNetworking 封裝代碼(根據(jù)需要封裝)。
SDWebImagePackage:SDWebImage 封裝代碼。
WechatSDKPackage:DDWeChatPay、WeixinService等
調(diào)整要點(diǎn)
DDManualThirdSDKs工程下,創(chuàng)建DDManualThirdSDKsREADME.md,做好第三方庫記錄和說明,再將DDManualThirdSDKs打包成一個(gè)私有庫,用Pods管理。
移除不使用的舊庫,有重大功能變更的庫,給出升級(jí)或替換或保持現(xiàn)狀的建議。
把所有使用的三方庫,梳理進(jìn)一個(gè)在線表格。三方庫的使用版本、最高版本、主要功能、哪些模塊使用(全部、多個(gè)模塊、單獨(dú)模塊)、依賴庫、備注項(xiàng),后續(xù)有指定人員維護(hù)。
4、梳理DDDevelopLib私有庫
自行封裝的私有庫,作為整個(gè)工程的基礎(chǔ)庫,不與具體的業(yè)務(wù)耦合,如系統(tǒng)類分類、數(shù)據(jù)處理類、通用UI組件、宏定義和常量定義等。做成私有庫,交給Pods管理。如ddDemo中的VerifyUpdate、UILib、DDAppkit、Common、Categorys、Function、DDMonkey等。
CoreCode文件夾主要文件分類如下:
CoreCode:核心代碼
DDCategorys:系統(tǒng)分類。
DDData:通用的數(shù)據(jù)。
DDUILib:通用的UI庫,如評(píng)分星星,輪播圖,大圖查看器等。
DDConfigs:宏定義和常量定義項(xiàng)目,如字體適配,顏色值等。
DDFunctionLib:絕對(duì)單純的數(shù)據(jù)處理工具類,靜態(tài)方法,非空判斷、日期字符串和日期對(duì)象的轉(zhuǎn)換等。
調(diào)整要點(diǎn)
新增DDDevelopLibREADME.md,管理庫能提供的功能,使用說明,修改說明,后續(xù)有指定人員維護(hù)。
主要移動(dòng)文件夾,盡量少的改動(dòng)邏輯,若項(xiàng)目中有存在相同邏輯或需要抽取代碼時(shí),請(qǐng)做好修改記錄和review代碼。
5、Resources文件整理
初步整理Resources資源文件,后期會(huì)根據(jù)資源情況再統(tǒng)一整理圖片資源,注意資源文件的加載路徑的變化后,保證資源文件能正常加載。
參考目錄結(jié)構(gòu)如下:
Images.xcassets:圖片系統(tǒng)管理器
DDFonts:字體庫
gif:動(dòng)圖管理
Data:數(shù)據(jù)資源文件plist:plist文件
json:json文件
調(diào)整要點(diǎn)
- 將Other Sources虛擬文件夾中的plist整理到Resources中。
- 將項(xiàng)目中使用的圖片、Plist文件、音視頻文件,暫時(shí)歸整到Resources文件下。
6、SupportingFiles文件整理
創(chuàng)建真實(shí)目錄SupportingFiles,文件路徑有所變化,請(qǐng)?jiān)陧?xiàng)目配置中調(diào)整,存放系統(tǒng)支持文件如下:
main.m
ddDemo-Info.plist
ddDemo_Prefix.pch
DDDebug.entitlements
三、工期評(píng)估
參照實(shí)施文檔進(jìn)行,初步評(píng)估工期為14天,后續(xù)遇到問題,及時(shí)溝通調(diào)整。

四、其他細(xì)節(jié)
- 開發(fā)人員的協(xié)調(diào)問題。
- 代碼review管控。
- 提測(cè),上線進(jìn)度把控。