大數(shù)據(jù)服務(wù)上云的思考">大數(shù)據(jù)服務(wù)上云的思考
693
2022-05-30
【本文正在參與“有獎?wù)魑?| HarmonyOS征文大賽”活動】
寫在前面
看到有一個HarmonyOS征文大賽”的活動,所以準(zhǔn)備在學(xué)習(xí)下,擁抱國產(chǎn)操作系統(tǒng), 之前學(xué)HarmonyOS 照著官網(wǎng)寫了一個Holle World(關(guān)于HarmonyOS的環(huán)境搭建,基本目錄結(jié)構(gòu),簡單Holle World實現(xiàn))
博文主題是關(guān)于服務(wù)卡片,原子化服務(wù)的,關(guān)于這個,在HarmonyOS 2.0發(fā)布會上有看到有講。
博文由兩部分內(nèi)容構(gòu)成: 服務(wù)卡片(原子化服務(wù))的一些基本概念,和官網(wǎng)Demo的代碼學(xué)習(xí)。
依舊,把HarmonyOS Developer的地址留在這里,博文好多都是文檔里的東西,建議小伙伴看文檔學(xué)習(xí),對于英語很垃圾的我來講,這回不用翻譯啦,有中文版,沒障礙。
嗯,博文有理解不對的地方請小伙伴積極留言
時光不能倒流,如果人可以從80歲開始倒過來活的話,人生一定會更加精彩。--------任正非
在最新發(fā)布的Harmonyos 2版本的新系統(tǒng)中, "服務(wù)卡片"服務(wù)成為一大亮點:^1
全新的Harmonyos桌面簡潔有序,上滑App生成服務(wù)卡片,在桌面即可呈現(xiàn)更豐富的信息。
卡片內(nèi)容實時更新,只需一管即可獲取所需信息,省去了打開App的時間。
卡片可大可小、可藏可顯,還能夠個性化定制,讓每個桌面獨一無二。
同時,卡片也是原子化服務(wù)的載體,在服務(wù)中心可以輕松獲取、隨時分享,無需下載、安裝,一步到位獲取各種服務(wù)。
嗯,下面開始我們愉快的HarmonyOS----服務(wù)卡片之旅吧!
什么是原子化服務(wù)
在學(xué)習(xí)服務(wù)卡片之前,我們先來了解一下什么是原子化服務(wù)
原子化服務(wù)是 HarmonyOS 提供的一種面向未來的服務(wù)提供方式,是有獨立入口的(用戶可通過點擊、碰一碰、掃一掃等方式直接觸發(fā))、免安裝的(無需顯式安裝,由系統(tǒng)程序框架后臺安裝后即可使用)、可為用戶提供一個或多個便捷服務(wù)的用戶程序形態(tài)。原子化服務(wù)基于 HarmonyOS API 開發(fā),支持運行在1+8+N設(shè)備上,供用戶在合適的場景、合適的設(shè)備上便捷使用。^2
例如:某傳統(tǒng)方式的需要安裝的“購物應(yīng)用A”,在按照原子化服務(wù)理念調(diào)整設(shè)計后,成為由“商品瀏覽”“購物車”“支付”等多個便捷服務(wù)組成的、可以免安裝的“購物原子化服務(wù)A”。
文檔里說的有些官方,
個人理解,原子化服務(wù)本質(zhì)還是終端應(yīng)用
(我們先這樣理解它,后面在具體描述),一個代替終端應(yīng)用提供新服務(wù)提供方式的存在。拋去服務(wù)流轉(zhuǎn)/分享、設(shè)備控制之類的分布式能力不說,在設(shè)計上類似于微信小程序和流應(yīng)用的優(yōu)點的結(jié)合體,在入口設(shè)計等方面感覺像微信小程序一樣便捷,但是不需要載體(微信,瀏覽器等),在整體體驗方面又像流應(yīng)用一樣,不需要顯示安裝。但是(體驗應(yīng)該要好于流應(yīng)用),個人理解不談分布式能力,像是用瘦客戶的方式有了胖客戶的體驗。
所謂原子化服務(wù),個人理解,即將原來的終端應(yīng)用以功能為粒度細(xì)化(原子化),分離成一個個服務(wù),多個服務(wù)之間通信完成需求,不在依托于具體的終端應(yīng)用。類似于一種極限的思想,細(xì)化功能粒度,逐漸減少對終端應(yīng)用總體的依賴。
關(guān)于原子化服務(wù)的更多內(nèi)容,小伙伴移步HarmonyOS Developer:什么是原子化服務(wù)
原子化服務(wù)具有如下基本要素
必須設(shè)計和開發(fā):
基礎(chǔ)信息
服務(wù)卡片
簡單了解一下基礎(chǔ)信息
:即每個原子化服務(wù)有獨立的圖標(biāo)、名稱、描述、快照。基礎(chǔ)信息應(yīng)能夠準(zhǔn)確反映服務(wù)提供方的特征及服務(wù)的核心體驗,并與其他關(guān)聯(lián)的應(yīng)用和服務(wù)保持同步最新。
其他的沒問題,我們重點看一下快照這里
:快照為與原子化服務(wù)關(guān)聯(lián)的小尺寸服務(wù)卡片的截圖。截圖應(yīng)為理想的服務(wù)狀態(tài),讓用戶一眼可知服務(wù)內(nèi)容。需提供直角圖片,由展示快照的應(yīng)用進(jìn)行圓角裁切.,
快照為與原子化服務(wù)關(guān)聯(lián)的小尺寸服務(wù)卡片的截圖.下面我們看看服務(wù)卡片是什么
什么是服務(wù)卡片,存在意義。
關(guān)于服務(wù)卡片,我們看看HarmonyOS Developer中設(shè)計文檔是怎么講的。https://developer.harmonyos.com/cn/docs/design/des-guides/service-widget-about-0000001144696239
服務(wù)卡片介紹
將原子化服務(wù)/應(yīng)用的重要信息以卡片的形式展示在桌面,用戶可通過快捷手勢使用卡片,通過輕量交互行為實現(xiàn)服務(wù)直達(dá)、減少層級跳轉(zhuǎn)的目的。
這是我的手機(jī)的時鐘應(yīng)用的類似的服務(wù)卡片的這樣一個東西,嗯,這個不算是服務(wù)卡片的。和實際的卡片還是有很大差距的.
這是P40模擬器上的時鐘,帶有服務(wù)卡片選項的,真正的服務(wù)卡片
服務(wù)卡片的核心理念在于提供用戶容易使用且一目了然的信息內(nèi)容,將智慧化能力融入到服務(wù)卡片的體驗中供用戶選擇使用,同時滿足在不同終端設(shè)備上的展示和自適應(yīng)。
服務(wù)卡片的構(gòu)成
服務(wù)卡片的顯示主要由內(nèi)容主體、歸屬的 App 名稱構(gòu)成,在臨時態(tài)下會出現(xiàn)Pin鈕的操作特征,點擊按鈕用戶可快捷將·卡片固定·在桌面顯示。開發(fā)者應(yīng)該借助卡片內(nèi)容和卡片名稱清晰地向用戶傳遞所要提供的服務(wù)信息。
嗯,關(guān)于服務(wù)卡片的其他這里不多介紹,小伙伴了解更多移步到
官方文檔:https://developer.harmonyos.com/cn/docs/design/des-guides/service-widget-about-0000001144696239
關(guān)于服務(wù)卡片的
交互設(shè)計,內(nèi)容設(shè)計,視覺風(fēng)格 等都有詳細(xì)講解。
簡單實踐-原子化服務(wù)之服務(wù)卡片初嘗試
檢驗真理的唯一標(biāo)準(zhǔn)是實踐 ,說了這么多,編碼試一下。先做出點東西來,然后我們在慢慢研究原理。嘻嘻。
官方給出一個java開發(fā)時鐘卡片的例子。
官方教程文檔見Java卡片開發(fā)指導(dǎo)
代碼見https://gitee.com/openharmony/codelabs/tree/master/ClockFACardDemo
這里,官方的Demo很簡單,文檔很完整小伙伴一看就明白。感興趣的可以拉下來跑跑,我們看看具體的實現(xiàn)成果
主體結(jié)構(gòu)分析
:
HarmonyOS支持應(yīng)用以Ability為單位進(jìn)行部署。Ability可以分為FA(Feature Ability)和PA(Particle Ability)兩種類型
FA:Page Ability:由上次的Holle Word我們可以知道,在HarmonyOS中,提供了Ability和·AbilitySlice·兩個基礎(chǔ)類, 一個有界面的Ability可以由一個或多個AbilitySlice構(gòu)成,AbilitySlice主要用于承載單個頁面的具體邏輯實現(xiàn)和界面UI,是應(yīng)用顯示、運行和跳轉(zhuǎn)的最小單元。所以ClockCardSlice為應(yīng)用的主界面UI.,即這個Demo中只有一個Page AbilitySlice(ClockCardSlice)。ClockCardSlice是通過setMainRoute()方法來指定,指定當(dāng)前Ability的默認(rèn)頁面。
PA:Service Ability: 由于時鐘是需要實時更新的,所以需要Service Ability來實時運行后臺任務(wù),即TimerAbility為時鐘更新的Service Ability
layout文件夾:頁面布局文件夾,由于時鐘卡片Codelab涉及兩個尺寸:22和24,因此需要新建兩個.xml文件用于頁面布局。
config.json:配置文件,用于卡片和Service Ability的聲明。
關(guān)于 Ability 的更多介紹PageAbility和ServiceAbility的生命周期回調(diào)等知識,小伙伴移步HarmonyOS Developer:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-service-lifecycle-0000000000044472
時鐘FA卡片應(yīng)用主要設(shè)計到創(chuàng)建、更新和刪除卡片,對象關(guān)系映射型數(shù)據(jù)庫的使用以及如何啟動計時器服務(wù),卡片布局等。下面我們就這幾部分代碼分析,學(xué)習(xí)。
HarmonyOS對象關(guān)系映射(Object Relational Mapping,ORM)數(shù)據(jù)庫是一款基于SQLite(一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。)的數(shù)據(jù)庫框架,屏蔽了底層SQLite數(shù)據(jù)庫的SQL操作,針對實體和關(guān)系提供了增刪改查等一系列的面向?qū)ο蠼涌凇?yīng)用開發(fā)者不必再去編寫復(fù)雜的SQL語句, 以操作對象的形式來操作數(shù)據(jù)庫,提升效率的同時也能聚焦于業(yè)務(wù)開發(fā)。
個人感覺和使用JPA有相同的地方,如果有使用過JPA的,那這個很容易理解。
對象關(guān)系映射數(shù)據(jù)庫的三個主要組件:
數(shù)據(jù)庫:被開發(fā)者用@Database注解,且繼承了OrmDatabase的類,對應(yīng)關(guān)系型數(shù)據(jù)庫。
實體對象:被開發(fā)者用@Entity注解,且繼承了OrmObject的類,對應(yīng)關(guān)系型數(shù)據(jù)庫中的表。
對象數(shù)據(jù)操作接口:包括數(shù)據(jù)庫操作的入口OrmContext類和謂詞接口(OrmPredicate)等。
package com.huawei.cookbooks.database; import ohos.data.orm.OrmObject; import ohos.data.orm.annotation.Entity; import ohos.data.orm.annotation.PrimaryKey; /** * Card Table 存放對象關(guān)系映射數(shù)據(jù)庫相關(guān)對象的目錄。 */ // TODO 定義一個對象關(guān)系映射的數(shù)據(jù)表 @Entity(tableName = "form") public class Form extends OrmObject { // TODO 聲明主鍵 @PrimaryKey() private Long formId; private String formName; private Integer dimension; public Form(Long formId, String formName, Integer dimension) { this.formId = formId; this.formName = formName; this.dimension = dimension; } public Form() { } public Integer getDimension() { return dimension; } public void setDimension(Integer dimension) { this.dimension = dimension; } public Long getFormId() { return formId; } public void setFormId(Long formId) { this.formId = formId; } public String getFormName() { return formName; } public void setFormName(String formName) { this.formName = formName; } }
package com.huawei.cookbooks.database; import ohos.data.orm.OrmDatabase; import ohos.data.orm.annotation.Database; /** * Card Database 卡片數(shù)據(jù)庫對象,用于創(chuàng)建卡片數(shù)據(jù)庫。 */ @Database( entities = {Form.class}, version = 1) public abstract class FormDatabase extends OrmDatabase { }
創(chuàng)建數(shù)據(jù)庫:開發(fā)者需要定義一個表示數(shù)據(jù)庫的類,繼承OrmDatabase,再通過@Database注解內(nèi)的entities屬性指定哪些數(shù)據(jù)模型類(表)屬于這個數(shù)據(jù)庫。
屬性:version:數(shù)據(jù)庫版本號。entities:數(shù)據(jù)庫內(nèi)包含的表。
創(chuàng)建數(shù)據(jù)表。開發(fā)者可通過創(chuàng)建一個繼承了OrmObject并用@Entity注解的類,獲取數(shù)據(jù)庫實體對象,也就是表的對象。
tableName:表名。primaryKeys:主鍵名,一個表里只能有一個主鍵,一個主鍵可以由多個字段組成。foreignKeys:外鍵列表。indices:索引列表
建立數(shù)據(jù)庫連接
提供對數(shù)據(jù)庫相關(guān)操作的方法
package com.huawei.cookbooks.utils; import com.huawei.cookbooks.database.Form; import ohos.data.orm.OrmContext; import ohos.data.orm.OrmPredicates; import java.util.List; /** * Card Database Operations 提供對數(shù)據(jù)庫相關(guān)操作的方法 */ public class DatabaseUtils { /** * delete data * * @param formId form id * @param connect data connection */ public static void deleteFormData(long formId, OrmContext connect) { OrmPredicates where = connect.where(Form.class); where.equalTo("formId", formId); List