跟阿斌一起學(xué)鴻蒙(2). Ability vs App?
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz
在進(jìn)一步實(shí)踐之前,需要先弄明白一個(gè)概念:Ability。
不知道你有沒有注意到,使用鴻蒙開發(fā)工具DevEco Studio創(chuàng)建項(xiàng)目時(shí),我們選擇創(chuàng)建的是一個(gè)個(gè)Ability。

這是為什么呢?
# 1. 鴻蒙OS的定位
這需要從鴻蒙OS的自我定位說起:鴻蒙OS是一個(gè)**分布式操作系統(tǒng)**。
## “單機(jī)”操作系統(tǒng)
在我們目前常用的操作系統(tǒng)中,不管是手機(jī)還是電腦,App(Application,應(yīng)用程序),是非常常見的一個(gè)概念,是我們解決問題的基本對(duì)象。
* 要跟朋友聊天,打開聊天App。
* 要聽歌,打開音樂App。
* 要看視頻,可以打開各種視頻App。
* 要寫文檔,打開Word或者PPT。
與鴻蒙操作系統(tǒng)不同,這些“單機(jī)”操作系統(tǒng)通常是
* 1). 運(yùn)行在同一類設(shè)備上,對(duì)于不同類型的設(shè)備,通常運(yùn)行不同的操作系統(tǒng)。
* 2). 設(shè)備與設(shè)備之間除了是物理上是分隔開的,在操作系統(tǒng)層面上也是分隔開的。
* 3). 設(shè)備之間的連接,通常是由需要連接的應(yīng)用來主動(dòng)發(fā)起,然后經(jīng)過操作系統(tǒng)通過網(wǎng)絡(luò)進(jìn)行連接。
* 4). App應(yīng)用,是操作系統(tǒng)管理的基本單元。
## 分布式操作系統(tǒng)
而鴻蒙OS所謂的分布式是怎么樣的呢?他是
* 1). 在不同的設(shè)備運(yùn)行著相同的鴻蒙OS。
* 2). 設(shè)備與設(shè)備之間雖然物理上是分隔開的,但是在操作系統(tǒng)層上是連接在一起的,而且是由操作系統(tǒng)自動(dòng)連接。
* 3). 應(yīng)用之間不再需要顯式發(fā)起網(wǎng)絡(luò)連接,而是直接相互通信。
* 4). 一個(gè)App(應(yīng)用)由多個(gè)Ability(能力)組成,而這些Ability是操作系統(tǒng)管理的基本單元。
于是,在鴻蒙OS上,如果你想
* 要跟朋友聊天,你可以在手機(jī)上聊天,在電視上聊天,在車?yán)铩⑸踔猎谑直砩狭奶?/p>
* 要聽歌,你可以用音箱聽,用手表看字幕,點(diǎn)贊和收藏
* 要看視頻,可以在電視上看,在手機(jī)上發(fā)彈幕
* 要寫文檔,可以在電腦上編輯,在手機(jī)上瀏覽和審批
更重要的是,這些操作都不需要通過互聯(lián)網(wǎng)進(jìn)行任何數(shù)據(jù)傳輸和消息同步,因?yàn)橥ㄟ^鴻蒙OS,你是
* 同一時(shí)間
* 在不同設(shè)備上
* 使用同一個(gè)App。
當(dāng)然,這些場(chǎng)景,并不是鴻蒙OS的專利,即使是在現(xiàn)在的環(huán)境現(xiàn)在的操作系統(tǒng)上,只要產(chǎn)品經(jīng)理認(rèn)為有需求,程序員們依然可以為你實(shí)現(xiàn),只是實(shí)現(xiàn)起來會(huì)相對(duì)麻煩,比如各種遠(yuǎn)程通信,各種數(shù)據(jù)和狀態(tài)的同步,還有各種聯(lián)調(diào)和測(cè)試。
而鴻蒙OS,將很多麻煩的處理過程整合到操作系統(tǒng)中,借此希望讓程序員們可以用更優(yōu)雅更自然的方式來實(shí)現(xiàn)這些功能,避免過早的頭禿。
# 2. Ability
而Ability,就是鴻蒙OS為程序員們提供的基礎(chǔ)設(shè)施之一。
## Ability 分類
鴻蒙OS將Ability分為兩大類:
1. 帶顯示功能的Ability,F(xiàn)eature Ability(FA 功能能力)
2. 不帶顯示功能的Ability,Particle Ability(PA)
PA 再細(xì)分為Service Ability(服務(wù)能力)和 Data Ability(數(shù)據(jù)能力)
## Ability = MVC?
咋一看,這不就是MVC嘛?
* View = Feature Ability 負(fù)責(zé)顯示
* Controller = Service Ability 負(fù)責(zé)業(yè)務(wù)邏輯
* Model = Data Ability 負(fù)責(zé)數(shù)據(jù)管理
如果用我們熟知的概念去套鴻蒙OS的概念,MVC也許確實(shí)是最接近的一個(gè)。
但是,可以用MVC去理解,不要被MVC所套住。
學(xué)一個(gè)新事物,最好還是試著去按照它的設(shè)計(jì)思路去思考,而不是用舊有的思路去套它的設(shè)計(jì),否則,難免會(huì)冒出:
* 為什么安卓或者iOS有這個(gè),而鴻蒙OS沒有?
或者,
* 鴻蒙OS為什么要設(shè)計(jì)這么一個(gè)玩意兒?
等等摸不著頭腦的問題。
## Ability是分布式調(diào)度的基本單元
Ability是鴻蒙OS作為操作系統(tǒng)進(jìn)行任務(wù)調(diào)度的基本單元。
鴻蒙OS在操作系統(tǒng)層將不同設(shè)備連接到一起,變成一個(gè)超級(jí)虛擬設(shè)備,為了適應(yīng)這樣的需求:
* Feature Ability,運(yùn)行在前臺(tái),用于交互,需要適應(yīng)不同的顯示和輸入方式。
* Particle Ability,運(yùn)行在后臺(tái),負(fù)責(zé)與交互無關(guān)的業(yè)務(wù),這類業(yè)務(wù)可以運(yùn)行在任何有足夠算力和資源的設(shè)備上,對(duì)于重度業(yè)務(wù),可以主動(dòng)選擇運(yùn)行在算力富余的設(shè)備上,甚至將任務(wù)分配到多個(gè)設(shè)備上進(jìn)行分布式計(jì)算。
* 不同的Ability可以靈活組合,以適應(yīng)不同的使用需求和運(yùn)行場(chǎng)景。
* Ability要足夠輕量,這樣,才能容易調(diào)度,甚至在被從一個(gè)設(shè)備調(diào)度到另一個(gè)設(shè)備上時(shí)也足夠流暢。
這個(gè)設(shè)計(jì)的關(guān)鍵之一是,不同設(shè)備間穩(wěn)定而快速的連接,有了這個(gè)可靠的基礎(chǔ),程序員才可以專注于Ability的開發(fā),而不用關(guān)心設(shè)備的連接和數(shù)據(jù)的傳輸。
而這,正是鴻蒙OS承諾的**分布式軟總線**提供的基礎(chǔ)功能。
# 3. 分布式編程思想?
所以,在鴻蒙OS之上進(jìn)行應(yīng)用開發(fā),可能需要一些分布式編程思想,而業(yè)務(wù)的開發(fā),可能,首先要從怎樣將一個(gè)傳統(tǒng)的App分解為不同的Ability開始,舉個(gè)例子,
比如,……
比如,……
比如,怎樣開發(fā)一個(gè)分布式的Hello Harmony呢?
就這樣,下一次,我們就來擼一個(gè)分布式的Hello Harmony吧。
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz