欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

一名一線開發(fā)對(duì)于App架構(gòu)和組件化的思考

2021-02-22    分類: 網(wǎng)站建設(shè)

關(guān)于App架構(gòu)、組件化,本文的內(nèi)容不會(huì)涉及到具體代碼層面,也不會(huì)介紹怎樣使用Cocoapods去做組件化;而是站在軟件工程的角度上,結(jié)合自己多年一線開發(fā)經(jīng)驗(yàn),去分析如何做App架構(gòu),如何通盤考慮什么樣的架構(gòu)才是合理的,契合自身業(yè)務(wù)的,以及架構(gòu)落地過程中應(yīng)該規(guī)避哪些問題。

名詞解釋:本文中所提到的架構(gòu)不是實(shí)際工程中代碼架構(gòu)(MVC、MVVM、MVP),確切的說是一種應(yīng)用分層架構(gòu)。而MVC、MVVM、MVP本質(zhì)是一種軟件架構(gòu)模式,是App實(shí)現(xiàn)過程中的一種編碼模式或者編碼規(guī)范。

iOS系統(tǒng)架構(gòu)回顧

一名一線開發(fā)對(duì)于App架構(gòu)和組件化的思考

如上圖所示,經(jīng)典的iOS系統(tǒng)架構(gòu)分為四層,自下而上分為核心操作系統(tǒng)層、核心服務(wù)層、媒體層、用戶交互層。

Cocoa Touch:提供與用戶交互的相關(guān)能力,包括觸摸等,最常用的UIKit庫就在該層;除此之外還有MapKit、Address BookUI、PhotosUI等。

Media Layer:提供圖形與音視頻相關(guān)功能的接口,例如Core Animation、OpenGL ES等。

Core Services:最常用的有Core Foundation、Foundation、CFNetwork、CoreData等。提供最基礎(chǔ)的能力,比如數(shù)組、字典、HashMap、套接字等基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)。

Core OS:包含Mach、Kernel、BSD、Socket以及Sandbox等,它主要提供了底層操作的接口,對(duì)于應(yīng)用開發(fā)來講直接用到的不是很多。

都說iOS系統(tǒng)牛逼,牛逼在哪?牛逼就牛逼在它有合理的架構(gòu)分層,還有合理的Api設(shè)計(jì),讓你能夠躺著就能做iOS開發(fā),暢享絲滑!它牛逼的文件管理和文件隔離機(jī)制讓你不需要過多考慮iOS系統(tǒng)安全性問題,逆向開發(fā)除外,因?yàn)樗偸荁ug般的存在????。

Q:iOS系統(tǒng)架構(gòu)這四層之間是如何進(jìn)行通信和交互的,是否合理?

A:直接引用頭文件,調(diào)用下層提供的Api進(jìn)行交互。關(guān)于是否合理,我想說的是只要Api設(shè)計(jì)的足夠合理,足夠能應(yīng)對(duì)未來一段時(shí)間內(nèi)SDK內(nèi)部可能的變動(dòng),或者說SDK本身是一個(gè)很基礎(chǔ)的庫,比如Foundation庫等,我覺得直接引入頭文件無傷大雅,具體的我們稍后再討論。

設(shè)計(jì)一個(gè)合理的應(yīng)用分層架構(gòu)

麻雀雖小五臟俱全,要想展翅高飛,每個(gè)環(huán)節(jié)缺一不可。

關(guān)于如何設(shè)計(jì)一個(gè)合理的應(yīng)用分層架構(gòu),這里我們拿蓋樓這件事做比喻,筆者干過建筑搬過磚,所以對(duì)于蓋樓流程相對(duì)來說比較熟悉。

第一步:打地基、支模板、澆灌水泥搭架子、搬磚壘墻,這是一切的基礎(chǔ),高樓要屹立不倒,需要這些模塊的長久有力的支撐才行。抽象到應(yīng)用架構(gòu)里面,我們稱之為基礎(chǔ)模塊,其主要提供應(yīng)用最基礎(chǔ)的能力。

第二步:鋪地面、造門,其中門在臥室、餐廳都可能會(huì)用到。抽象到應(yīng)用架構(gòu)里面,我們稱之為公共業(yè)務(wù)模塊,它主要提供了一些通用的業(yè)務(wù)模塊或者通用的組件。

第三步:給大樓賦能,臥室、餐廳、洗漱間等一應(yīng)俱全,有了這些才能真正體現(xiàn)蓋大樓的意義。臥室等功能都要用到磚、墻、門等基礎(chǔ)模塊。在應(yīng)用架構(gòu)中,我們把臥室、廚房、洗漱等獨(dú)立功能抽象為普通業(yè)務(wù)模塊,每個(gè)業(yè)務(wù)模塊都代表一個(gè)具體的功能,業(yè)務(wù)模塊間沒有強(qiáng)關(guān)聯(lián)關(guān)系。

Q:除了以上的部分,是否還缺點(diǎn)什么東西?

A:樓層跟樓層之間需要電梯連接通信,臥室和廚房之間也需要通道進(jìn)行連接。同樣對(duì)于應(yīng)用來講,模塊間的通信也需要一個(gè)媒介連接起來,我們稱之為總線(Bus)。后續(xù)會(huì)詳細(xì)介紹如何實(shí)現(xiàn)一個(gè)總線,讓你的模塊各自分工,且模塊間的通信暢通無阻。

經(jīng)過分析梳理,我們很容易能夠畫出如下的應(yīng)用架構(gòu)圖,圖中每層都標(biāo)出了該層大致包含哪些內(nèi)容。

一名一線開發(fā)對(duì)于App架構(gòu)和組件化的思考

圖中,我們按照“蓋大樓”的思路,進(jìn)一步抽象羅列出了一個(gè)App應(yīng)該包含哪些結(jié)構(gòu)。

應(yīng)用架構(gòu)實(shí)施落地

在iOS平臺(tái)中,我們一般會(huì)通過Cocoapods去管理、集成自己的組件。按照工廠化生產(chǎn)App的理念,結(jié)合Cocoapods我畫出了如下的App集成圖。

一名一線開發(fā)對(duì)于App架構(gòu)和組件化的思考

基礎(chǔ)模塊:因模塊高度獨(dú)立,且高頻使用,若公司內(nèi)部有多個(gè)App同時(shí)需要依賴,建議單獨(dú)創(chuàng)建私有庫Specs。

公共業(yè)務(wù)模塊:功能相對(duì)獨(dú)立,根據(jù)業(yè)務(wù)需求來決定是否單獨(dú)創(chuàng)建私有庫Specs。

Cocoapods公有庫:所有公司內(nèi)部App,強(qiáng)烈建議不要直接引入公有Specs。這樣做有兩點(diǎn)好處:

  1. 跟外部環(huán)境有效隔離,第三方庫發(fā)生問題,公司內(nèi)部可控。
  2. 公有庫太大,每次repo update耗時(shí)太長,國內(nèi)的環(huán)境你懂的,沒有科學(xué)上網(wǎng),至少一個(gè)小時(shí)過去repo也未必更新完畢。所以通用的方案是,若公司內(nèi)部引用了第三方庫,按照依賴倒置的原則,建議封裝一層之后放到Basic Specs供業(yè)務(wù)方使用。在這里推薦一個(gè)科學(xué)上網(wǎng)工具,可自行搭建
  3. 一名一線開發(fā)對(duì)于App架構(gòu)和組件化的思考

    通過上圖可以發(fā)現(xiàn),首頁組件實(shí)際只是獲取了登錄態(tài),但登錄模塊沒有提供對(duì)應(yīng)服務(wù),則只能通過引用頭文件的方式把該組件import進(jìn)來,兩者耦合在一起。

    利用中間件的概念,我們可以在兩個(gè)模塊之間建立一個(gè)服務(wù)層,專門用來進(jìn)行模塊間的數(shù)據(jù)通信,或者非界面跳轉(zhuǎn)的小粒度組件的數(shù)據(jù)通信。這樣就很好的解決了兩個(gè)組件的橫向依賴問題。

    業(yè)務(wù)模塊間的橫向依賴。

    這里主要說的是那些業(yè)務(wù)功能獨(dú)立、業(yè)務(wù)線之間的橫向依賴。舉例說明,首頁模塊可能帶有業(yè)務(wù)A、業(yè)務(wù)B、業(yè)務(wù)C的入口,如果沒有做組件化,則首頁模塊連同A、B、C業(yè)務(wù)都耦合在一起。這里推薦幾個(gè)比較比較常用的路由解決方案。

    • JLRoutes-URL routing library for iOS with a simple block-based API。
    • BeeHive-iOS的App模塊化編程的框架實(shí)現(xiàn)方案,吸收了Spring框架Service的理念來實(shí)現(xiàn)模塊間的API耦合。
    • CTMediator-基于Mediator模式和Target-Action模式。

    Q:我該如何設(shè)計(jì)一個(gè)路由,用于模塊間的跳轉(zhuǎn)?

    A:設(shè)計(jì)路由需要遵循幾個(gè)原則。

    • 第一,便于集成,最小的改動(dòng)即可實(shí)現(xiàn)一個(gè)路由。
    • 第二,大限度把參數(shù)正確性校驗(yàn)提前,能在編譯時(shí)校驗(yàn)就不要在運(yùn)行時(shí)校驗(yàn)。
    • 第三,盡可能的支持多種注冊(cè)方式,靜態(tài)注冊(cè)、動(dòng)態(tài)注冊(cè)、服務(wù)配置等。

    分享名稱:一名一線開發(fā)對(duì)于App架構(gòu)和組件化的思考
    分享路徑:http://aaarwkj.com/news/102325.html

    成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、標(biāo)簽優(yōu)化、全網(wǎng)營銷推廣關(guān)鍵詞優(yōu)化、用戶體驗(yàn)企業(yè)網(wǎng)站制作

    廣告

    聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

    微信小程序開發(fā)
    日日干夜夜射天天操| 超薄丝袜美腿一二三区在线播放 | 亚洲av最近在线观看| 亚洲第一精品国产日韩| 中文字幕日韩激情欧美一区| 日本97久久久久久精品| 亚洲综合欧美日韩一区| 人成在线免费视频网站| 人人看男人的天堂东京| 久久精品国产精品亚洲片| 正在播放蜜臀av在线| 99热这里只有精品在线| 精品欧美黑人一区二区| 新午夜福利片在线观看| 国产成人免费视频大全| 久久久久久久精品久久| 在线 | 一区二区三区四区| 91成人伦理在线观看| 人妻少妇中文字幕一区| 国产精品三级玖玖玖电影| 国产中文精品字幕a区| 国产精品精品国产色婷婷| 高清日韩精品视频在线观看| 桃色av一区二区三区| 欧美护士激情第一欧美精品 | 日韩黄色资源在线观看| 青青草国产自拍在线视频| 亚洲av成人永久网站一区| 美日韩黄色大片免费看| 91九色最新国产在线| 成人黄性视频免费网看| 国产丝袜美腿诱惑久久| 黄色成人av免费看| 熟女av一区二区三区四区| 日韩欧美亚洲一级黄片| 婷婷中文字幕在线不卡视频| 欧美日韩一区二区综合性色| 久热在线这里只有精品| 日本av人妻在线观看| 日韩传媒在线观看视频| 欧美黄片高清免费播放|