2015年入職XDF參與留留學iOS端的研發(fā),至今,參與了好幾個項目(留留學、掌上新東方、SL、樂聽說等),最近負責樂聽說iOS App端。不同項目的經歷,讓我接觸到了不同的項目架構和代碼風格,也讓我對App的項目架構有所思考與心得。 1、App早期架構1.02015年6月留留學App iOS端1.0.0版本誕生,當時采用的架構很簡單,就是在傳統(tǒng)的MVC架構基礎上,封裝了一個網絡服務層構建而成的,當時為了快速迭代上線,所以移動端App開發(fā)采用了“短平快”的MVC架構,架構如下圖所示: 這種架構以層次結構簡單清晰,代碼容易開發(fā)而被大多數(shù)人接受,各層的分工如下:
但經過幾個版本的迭代,我們發(fā)現(xiàn)App所采用的MVC架構從Model-View-Controller走向了Massive-View-Controller的終點,其最嚴重的結果就是Control層的代碼越來越多越來越臃腫難于擴展維護,同時Control層和View層之間存在一些較高的耦合。 2、App架構2.0基于上述遇到的問題,我們對原有的傳統(tǒng)架構做了優(yōu)化和調整,提出App架構2.0,并在留留學2.3.0項目中開始逐步重構采用MVVM分層架構,通過MVVM架構,可以有效實現(xiàn)Controller和View的解耦,同時使Controller輕量級,最終使越來越臃腫的Controller層逐步縮小并分解解耦,業(yè)務邏輯分模塊下沉。 掌新架構如下: 各層的分工如下:
通過MVVM架構,可以有效實現(xiàn)Controller和View的解耦,同時使Controller輕量級,但這種架構也有一些弊端,會讓導致VM或Model中出現(xiàn)大量的基本業(yè)務處理、數(shù)據(jù)處理等,最后也會導致VM層變的臃腫,同時讓Model層沒那么純粹,變的雜亂無序,所以還是需要進一步優(yōu)化和剝離業(yè)務與數(shù)據(jù)的耦合。 3、App架構2.0+也基于上述遇到的問題,我們對App架構2.0做了優(yōu)化和調整,便衍生了App2.0+分層架構,采用MVVM+分層架構模式解耦,使越來越臃腫的Controller層逐步縮小并分解解耦,業(yè)務邏輯分模塊下沉。由于留留學3.1.0之后就暫停了迭代,所以只對掌上新東方App 3.1.0之后的版本開始逐步采用MVVM+分層架構模式進一步解耦。調整后的架構如下: 各層的分工如下:
對比2.0架構,我們是在ViewModel層和Model層之間插入了一個Service層,對于此次架構調整優(yōu)點如下:
對比1.0架構,我們是在原有的Controller層和Service層之間插入了一個ViewModel層,架構調整前后對比如下表:
4、App架構3.0都是基于當前我參與的樂聽說基于2.0+架構采用swift開發(fā)的口語評測App,留留學、新東方、樂聽說App等現(xiàn)有架構可實現(xiàn)內部豎向解耦,后續(xù)開發(fā)中我們將逐步實現(xiàn)各個層同層內部子模塊的解耦工作(橫向解耦);同層之間各個子模塊之間調用相互依賴,會嚴重影響各個模塊之間的解耦,如A模塊內部(甚至外部)依賴B、C模塊,而B、C模塊又依賴A模塊,這種相互依賴、相互include的情況導致各個模塊相互不能獨立,嚴重影響編譯速度和擴展性、靈活性等, 在后續(xù)版本中為了完成橫向解耦我們內部將開發(fā)實現(xiàn)一個動態(tài)路由組件(DR,Dynamic Route),以樂聽說為例進行說明,如下圖: 路由實現(xiàn)方案簡圖如下: 5、模塊化結合Pods參與的項目基本都是采用模塊化開發(fā),盡量實現(xiàn)高內聚低耦合,以掌上新東方為例,App研發(fā)模塊以及對接平臺眾多,我們采用MVVM架構(后期采用MVVM+架構)進行模塊化開發(fā),實現(xiàn)工程的可擴展性以及易維護性,盡量做到高內聚低耦合。如下圖: 我們將嘗試采用模塊化結合Pods進行管理,對于常用功能的封裝,只要開放出一些簡單開關配置方式,就可以實現(xiàn)一個功能,比如日志記錄、網絡請求模塊、網絡狀態(tài)變化提示等。 將分OC和Swift語言開發(fā)兩套對應的路由組件,會優(yōu)先著手OC版本的研發(fā),由于之前都忙于項目開發(fā),近期會抽時間對代碼進行完善(LLRouter),如有好的思路和見解,可以給我提issues,核心代碼如下圖: 6、總結App架構以及相關性能的優(yōu)化不是一蹴而就的,需要不斷的探索和鉆研!同時架構沒有真正的好壞之分,只要適用于自己的業(yè)務,就是好的架構! |
|