? ? ? ? 幾年來,開發過若干項目,有單工程的小項目,也有若干組件組成的大一點的項目,對APP架構有一些自己的理解。
? ? ? ? 首先說單工程項目。開發前期,要對整個項目有全面的了解,對未來趨勢有一個大致的預計。如果業務不多,未來擴展要求也不高,可以直接寫成單工程項目。單工程項目適合單人開發維護,能快速的解決問題,擴展功能。但是,一旦多人維護,就會經常遇到代碼沖突的問題。項目小,建議用單工程。
? ? ? ? 現在大多數公司都是多人團隊,多人維護同一個項目。一般都是采取模塊化,組件化開發模式。個人負責自己的組件,相互之間很少會有代碼沖突問題。而且,個人負責自己的技術或者業務模塊,能對相關知識有很深的了解。不過,有利有弊。這樣不利于團隊同事對其他模塊業務技術的了解,若有同事離職等問題,會造成響應業務線短期的真空狀態。不過,模塊化開發,可以很方便的增加,減少業務線,在技術支持足夠的情況下,業務的開關過程會很迅速,代碼會很簡潔,還是很好的。當然,模塊化開發也是會有一些問題的,以我們公司的為例。
問題:
? ? ? ? 1.代碼冗余較嚴重。組件開發完成后會做靜態代碼走查,單個組件的代碼冗余控制的很好。但是由于業務劃分不明確,以及為了兼容性,穩定性考慮,組件與組件之間的代碼冗余,資源冗余較嚴重。
? ? ? ? 2.組件定位不明確。開始的時候沒有業務層,技術層的明確劃分,導致很多組件不倫不類,既有技術的功能,又有業務的功能。
? ? ? ? 3.團隊內部對優秀組件的使用不積極。 ?我們后期為兼容崩潰開發了若干個優秀組件,但是只有各自的開發者使用,別的同事很少使用。
? ? ? ? 4.第三方組件更新不及時。 ?一直擔心兼容適配問題,工程內部的第三方組件,AFNetworking,SDWebImage等更新緩慢。
? ? ? ? 5.引用第三方SDK有時候會有庫的沖突問題。有一些相近功能的SDK,會使用同一個framework,而且有的是直接把framework打到SDK里面,使用時就會造成庫沖突。而且,有時候SDK內部類命名不規范,也會造成沖突。
解決方案:
? ? ? ? 1.推行人工代碼走查與靜態走查相結合機制,堅決杜絕不必要的代碼冗余問題。
? ? ? ? 2.明確項目層級。將組件明確為業務層組件和基礎層組件。.業務層組件負責實現APP業務需求,基礎層組件為業務層組件提供技術支持。像電商的秒殺模塊,活動模塊,購物車模塊,商品詳情模塊等,都屬于業務層,像網絡引擎,數據管理等都屬于基礎層。
? ? ? ? 3.定期進行技術討論,分享優秀組件。
? ? ? ? 4.時時關注第三方優秀組件更新,即使更新版本。
? ? ? ? 5.要多多使用繼承,工程中所有控制器一定要有一個相同的父類,這樣如果需要做一些特殊的處理,埋點啦,崩潰記錄啦,就會很方便。
? ? ? ? 6.減少對第三方SDK的使用,即使使用,也要多做技術預言,選擇合適的SDK。
對項目架構設計的記錄:
單工程項目:也走模塊化,組件化設計思想
1.建議使用cocoaPods管理第三方組件,所以工程層由APP工程和Pods工程。
2.APP工程,有四個文件夾,分別是APP名的文件夾,Products文件夾,Pods文件夾,Frameworks文件夾。
3.APP名的文件夾下,有APPBase文件夾,Business文件夾,Lib文件夾,AppLife文件夾。
4.APPBase文件,存放APP級別的基礎框架,類,等,文件下有BaseView文件夾,Category文件夾,BaseViewController文件夾,BaseControl文件夾,路由文件夾。路由文件夾下有對應的技術支撐組件,包括路由組件,中間件組件,大圖瀏覽組件,網絡請求組件,上傳組件等等。
5.Business文件夾,包括業務基礎文件夾和各業務模塊文件夾,每一個業務模塊文件夾下按MVC模式創建對應的文件夾。
6.AppLife文件夾下包括appdelegate文件和main.m文件和pch文件。
多組件項目:
? ? ? ? 1.大的項目使用組件化開發架構.
? ? ? ? 2.組件分為技術組件,技術基礎組件,業務基礎組件,業務組件。技術類組件要優先開發,業務類組件開發過程中,不斷優化技術組件功能和API接口。
? ? ? ? 3.工程要有自己的統一的Base類,譬如BaseUIViewController,BaseUIView,BaseNsobject等,如果要統一改一個東西,或者統計數據什么的,會很有用。
? ? ? ? 4.開發過程中,按功能創建文件夾,同一功能的代碼都放在一個文件夾下,功能文件夾內要按照MVC結構創建對應文件夾,Controller,View,UIViewController,Cell,Model等文件夾。
? ? ? ? 5..h文件做好類的備注,方便以后查閱,方便查找。
? ? ? ? 6..m文件,定義屬性時,從上到下依次是UI屬性,Foundation庫相關的NSString,NSArray,NSDictionary屬性,模型屬性。
? ? ? ? 7..m的實現,從上到下一次是懶加載,SET函數,生命周期函數,代理函數,自定義函數。