當前位置:編程學習大全網 - 編程語言 - 餓了麽移動APP的架構演進

餓了麽移動APP的架構演進

在餓了麽業務發展的早期,移動APP經歷了從無到有的階段。為了快速上線搶占市場,傳統移動APP開發的MVC架構成了“短平快”思路的首選:

MVC架構

這種架構因簡單清晰,容易開發而被大多數人所接受。

在MVC的體系架構中,Controller層負責整個APP中主要邏輯功能的實現;Model層則負責數據結構的描述以及數據持久化的功能;而View層作為展現層負責渲染整個APP的UI。分工清晰,簡潔明了。此外,這種系統架構在語言框架層就得到了Apple的支持,所以非常適用於APP的startup開發。

然後,這種架構在開發的後期會由於其超高耦合性,造成Controller層龐大,而這也是壹直被人們所詬病。最終的MVC都從Model-View-Controller走向了Massive-View-Controller的終點。

2

Module

Decoupled

“短平快”的MVC架構在早期可以滿足餓了麽移動APP的快速開發叠代,但是隨著代碼量的不斷增加,臃腫的Controller層也在漸露頭角;而業務上,餓了麽移動APP也從單壹APP發展為多APP齊頭並進的格局。這時候,降低耦合,復用已有模塊便成了架構的第壹要務。

架構中,模塊復用的第壹要求便是代碼的功能組件化。組件化意味著擁有獨立功能的代碼從系統中進行抽象並剝離,再以“插件”的形式插回原有系統中。這樣剝離出來的功能組件,便可以供其他APP使用,從而降低系統中模塊與模塊之間的耦合性;也同時提高了APP之間代碼的復用性。

餓了麽移動對於組件有兩種定義:公有組件和業務組件。公有組件指的是封裝得比較好的壹些SDK,包括壹些第三方組件和自己內部使用的組件。如iOS中最著名的網絡SDK AFNetworking,Android下OKHttp,都是這類組件的代表。業務組件,則定義為包含了壹系列業務功能的整體,例如登錄業務組件,註冊業務組件,即為此類組件的典型代表。

對於公有組件,餓了麽移動采取了版本化的管理方式,而這在iOS和Android平臺上早有比較成熟的解決方案。例如,對於iOS平臺,CocoaPods基本上成為了代碼組件化管理的標配;在Android平臺上,Gradle也是非常成熟和穩健的方案。采用以上管理工具的另壹個原因在於,對企業開發而言,代碼也是壹種商業機密。基於保密的目的,支持內網搭建私有服務器成為了必需。以上的管理工具都能夠很好地支持這些操作。

對於業務的組件化,我們采取了業務模塊註冊機制來達到解耦合的目的。每個業務模塊對外提供相應的業務接口,同時在系統啟動的時候向Excalibur系統註冊自己模塊的Scheme(Excalibur是餓了麽移動用來保存Scheme與模塊之間映射的系統,同時能根據Scheme進行Class反射返回)。 當其他業務模塊對該業務模塊有依賴時,從Excalibur系統中獲取相關實例,並調用相應接口來實現調用,從而實現了業務模塊之間的解耦目的。

而在業務組件,即業務模塊的內部,則可以根據不同開發人員的偏好,來實現不同的代碼架構。如現在討論得比較火的MVVM, MVP等,都可以在模塊內部進行而不影響整體系統架構。

這時候的架構看起來更像是這樣:

EMC架構

E(Excalibur)M(Modules)C(Common)架構以高內聚、低耦合為主要的特點,以面向接口編程為出發點,降低了模塊與模塊之間的聯系。

該架構的另外壹大好處則在於解決了不同系統版本的兼容性問題。這裏以iOS平臺下的WebView作為例子來進行說明。Apple從iOS8系統開始提供了壹套更好的Web支持框架——WebKit,但在iOS7系統下卻無法兼容,從而導致Crash。使用此類架構,可以在iOS7系統下仍然註冊使用傳統的WebView來渲染網頁,而在iOS8及其以上系統註冊WebKit來作為渲染網頁的內核。既避免了Apple嚴格的審核機制,又達到了動態加載的目的。

3Hybrid

移動APP的開發有兩種不同的路線,NativeAPP和Web APP。這兩種路線的區別類似於PC時代開發應用程序時的C/S架構和 B/S架構。

以上我們談到的都屬於典型的Native APP,即所有的程序都由本地組件渲染完成。這類APP優點是顯而易見的,渲染速度快、用戶體驗好;缺點同時也十分突出:出現了錯誤壹定要等待下壹次用戶進行APP更新才能夠修復。

Web APP的優點恰好就是Native APP的缺點所在,其頁面全部采用H5撰寫並存放在服務器端。每次進行頁面渲染時都從服務器請求最新的頁面。壹旦頁面有錯誤,服務器端進行更新便能立刻解決。不過其弊端也容易窺見:每次頁面都需要請求服務器,造成渲染時等待時間過長,從而導致的用戶體驗不夠完美,並且性能上較Native APP慢了1-2個數量級;與此同時還會導致更多的用戶流量消耗。另壹個缺點則在於,Web APP在移動端上調用本地的硬件設備存在壹定的不便。不過這些弊端也都有相應的解決方案,如PhoneGap將網頁提前打包在本地以減少網絡的請求時間;同時也提供壹系列的插件來訪問本地的硬件設備。然而,盡管如此,其渲染速度上還是存在壹定的差距。

Hybrid APP則是綜合了二者優缺點的解決方案。餓了麽移動對於此二類APP的觀點在於,純粹展示性的模塊會更適合使用Web頁面來達到渲染的目的;而更多的數據操作性、動畫渲染性的模塊則更適合采用Native的方式。

  • 上一篇:數控車床怎麽用G76加工螺紋
  • 下一篇:CNC加工中心中如何對刀?調程序?分中?如題 謝謝了
  • copyright 2024編程學習大全網