两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種面向嵌入式系統(tǒng)開發(fā)的動態(tài)數(shù)據(jù)通用框架的制作方法

文檔序號:11154430閱讀:347來源:國知局
一種面向嵌入式系統(tǒng)開發(fā)的動態(tài)數(shù)據(jù)通用框架的制造方法與工藝
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別是一種面向嵌入式系統(tǒng)開發(fā)的動態(tài)數(shù)據(jù)通用框架。
背景技術(shù)
:在計(jì)算機(jī)系統(tǒng)中,框架是一個指定何種程序可以或者應(yīng)該構(gòu)建在此之上,以及它們應(yīng)該如何通信的結(jié)構(gòu)層面。有些系統(tǒng)框架同時包含了實(shí)際的程序,同時定義了軟件接口,或者提供開發(fā)工具來使用此框架??蚣芗瓤梢允窍到y(tǒng)中的一套方法,來限定軟件如何和框架之間進(jìn)行通信,也可以是操作系統(tǒng)上的某一層,或者是一個應(yīng)用程序的子系統(tǒng)層,或者可以是來規(guī)范化統(tǒng)一化網(wǎng)絡(luò)通信,等等。一般來說,框架比協(xié)議更具體,而比結(jié)構(gòu)更加抽象??蚣艿哪繕?biāo)是用于提供一個普適性的結(jié)構(gòu),幫助開發(fā)者來減少重復(fù)的工作并且復(fù)用已有的代碼??蚣芫哂幸韵聨讉€優(yōu)點(diǎn):1)提高開發(fā)效率對于某個特定的任務(wù),實(shí)現(xiàn)方法往往是一致的,而在系統(tǒng)的設(shè)計(jì)之初,為了方便其擴(kuò)展,它提供的原有接口因?yàn)榭蓴U(kuò)展性的考慮而犧牲了易用性;同時,對于某個特定系統(tǒng)業(yè)務(wù),開發(fā)者需要多次使用。在這些情況下,開發(fā)人員需要編寫重復(fù)的代碼。基礎(chǔ)的業(yè)務(wù)以及特定的業(yè)務(wù)往往具有共性,因此,通過成熟的開發(fā)框架,可以減少公共部分代碼的編寫,并且減少調(diào)試的時間,可以讓開發(fā)人員集中于其他邏輯的開發(fā)。2)易于擴(kuò)展通過框架定義的接口,開發(fā)人員可以方便地對框架進(jìn)行擴(kuò)展,以支持新的業(yè)務(wù)。在某些場景之下,業(yè)務(wù)具有相似性,因此,開發(fā)人員可以對框架進(jìn)行進(jìn)一步擴(kuò)展,以支持更多的業(yè)務(wù)。同時,框架可以作為系統(tǒng)基礎(chǔ)架構(gòu),并在此之上進(jìn)行全新架構(gòu)的開發(fā)。3)可驗(yàn)證性強(qiáng)由于框架的使用具有廣泛性以及可靠性,因此,開發(fā)人員可以將精力放在邏輯代碼中。目前,大多數(shù)框架只針對于服務(wù)端中的資源。它們并沒有考慮其他資源,例如客戶端本地?cái)?shù)據(jù)庫、本地服務(wù)等資源。在工業(yè)界中,為了提高用戶體驗(yàn),絕大多數(shù)的應(yīng)用采用了分層的數(shù)據(jù)展示模式,因此,一個面向多資源的架構(gòu)是非常有必要的。在工業(yè)界,第三方公司或個人開發(fā)了許多Android平臺的開發(fā)框架。AndroidAnnotations提供了視圖、資源的注入,事件綁定,并提供了一個簡化的UI線程模型。AndroidAnnotations簡化了視圖資源注入過程以及事件綁定,簡化了線程的使用。但是它沒有很好的做到邏輯的分離。在示例代碼中可以看到,所有的邏輯都在交互界面(Activity)中實(shí)現(xiàn),容易使Activity變得臃腫。同時,AndroidAnnotations只提供了初始化的狀態(tài),在交互階段沒有提供更多的功能。它更多提供的是依賴注入的功能,而沒有做到結(jié)構(gòu)的分離。SpringforAndroid是Spring框架的擴(kuò)展,用于簡化Android本地應(yīng)用程序的開發(fā)。它提供了一個REST客戶端,用于處理REST請求,并直接轉(zhuǎn)化成一個可重用組件(JavaBean)。SpringforAndroid提供了一個簡單的REST客戶端,并且僅限于此。RxAndroid是Reactivex在Android平臺上的擴(kuò)展,它是一個事件驅(qū)動的、異步的框架,可以讓開發(fā)者在Java中進(jìn)行函數(shù)響應(yīng)式編程,提供一種組合式的編程方法,并提供了專門出錯處理,適用于處理并發(fā)問題。同時,RxAndroid結(jié)合了Android的特性,提供了UI線程和非UI線程的交互功能。RxAndroid為Android編程提供了事件驅(qū)動的框架,通過監(jiān)聽事件的模式,減少代碼的耦合度。RxAndroid提供了一種基于事件驅(qū)動的編程方式,并沒有針對數(shù)據(jù)處理、測試提供系統(tǒng)的架構(gòu),沒有針對Android工程的系統(tǒng)結(jié)構(gòu)提供優(yōu)化,應(yīng)用RxAndroid的開發(fā)依然存在著胖Activity的問題。jQueryMobile是一個移動開發(fā)框架,是jQuery在移動設(shè)備上的分支,包含了一套核心庫,并且提供了一個完整、統(tǒng)一的UI框架。jQueryMobile的主要使用方式為標(biāo)記,通過標(biāo)記在頁面中綁定數(shù)據(jù)展示方式。然而jQueryMobile是前端的開發(fā)框架,并沒有針對多目標(biāo)資源進(jìn)行設(shè)計(jì)。ThinkAndroid是一個免費(fèi)的開源的、簡易的、遵循Apache2開源協(xié)議發(fā)布的Android開發(fā)框架。其開發(fā)宗旨是簡單、快速的進(jìn)行Android應(yīng)用程序的開發(fā),包含AndroidMVC、簡易SQLiteORM、IOC模塊、封裝AndroidHttpClitent的HTTP模塊,具有快速構(gòu)建文件緩存功能,無需考慮緩存文件的格式。同時,該框架還包括了一個手機(jī)開發(fā)中經(jīng)常應(yīng)用的實(shí)用工具類,如日志管理,配置文件管理,android下載器模塊,網(wǎng)絡(luò)切換檢測等等工具。該框架是一個工具類的集合,并沒有對系統(tǒng)構(gòu)建提出解決方式。LoonAndroid是一個自動注入框架,同時提供了實(shí)現(xiàn)了多重緩存、自動回收功能的圖片加載框架,封裝了一個網(wǎng)絡(luò)請求模塊。該框架集成了EventBus框架,讓開發(fā)人員可以通過事件監(jiān)聽的方式實(shí)現(xiàn)模塊間的解耦,同時提供了一系列的工具類。然而,這些框架都是針對某個或某些特定問題的框架,并沒有在整個系統(tǒng)層面上進(jìn)行設(shè)計(jì)。技術(shù)實(shí)現(xiàn)要素:本發(fā)明所要解決的技術(shù)問題是,針對現(xiàn)有技術(shù)不足,提供一種面向嵌入式系統(tǒng)開發(fā)的動態(tài)數(shù)據(jù)通用框架。為解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是:一種面向嵌入式系統(tǒng)開發(fā)的動態(tài)數(shù)據(jù)通用框架,包括:資源管理器,用于負(fù)責(zé)在全局范圍內(nèi)提供數(shù)據(jù);虛擬加載器,用于動態(tài)加載dex文件中的類或者外部文件中的類,通過資源管理器獲取所需資源;視圖綁定器,用于將虛擬加載器提供的不同類型的數(shù)據(jù)綁定到對應(yīng)的控件中。所述資源提供器的工作流程包括:1)獲取所需加載數(shù)據(jù)對應(yīng)的URI;2)根據(jù)對應(yīng)的URI獲取數(shù)據(jù);3)實(shí)體從資源提供器中取回?cái)?shù)據(jù)并在虛擬加載器所加載的界面需要的時候調(diào)用使用。根據(jù)對應(yīng)的URI獲取數(shù)據(jù)的具體實(shí)現(xiàn)過程包括:1)提供統(tǒng)一資源標(biāo)識符URI、接收UI線程回調(diào)的對應(yīng)接口、資源提供器;2)通過檢索資源提供器獲得數(shù)據(jù)對象o;3)如果該數(shù)據(jù)對象o為空,則從資源提供器中獲取新的替代資源P,進(jìn)入步驟4);如果數(shù)據(jù)對象o不為空,則UI線程處理數(shù)據(jù)對象o;4)如果資源P為空,則該線程處理失?。蝗绻Y源P不為空,則處理該數(shù)據(jù)P與UI線程。所述實(shí)體包括請求-響應(yīng)范式實(shí)體Poster、數(shù)據(jù)加載實(shí)體Director以及數(shù)據(jù)獲取實(shí)體Multiple。所述虛擬加載器的工作流程包括:1)根據(jù)交互界面activity名稱在最小可替換單元MRU數(shù)據(jù)庫中進(jìn)行查詢,如果本地中存在此MRU,則加載該MRU,否則,執(zhí)行原有activity;2)根據(jù)不同類別的最小可替換單元MRU,分別進(jìn)行不同的替換:第一類替換:開發(fā)者需要某個資源時,繞過索引系統(tǒng),使用一個標(biāo)識符identifier來對資源進(jìn)行重新導(dǎo)向,實(shí)現(xiàn)第一類替換的MRU模塊使用對象名綁定;第二類替換:通過類加載器ClassLoader來加載外部存儲空間中的目標(biāo)交互界面Activity,當(dāng)應(yīng)用程序需要加載一個特定的界面Activity時,虛擬加載器在本地?cái)?shù)據(jù)庫中查找是否有相應(yīng)的最小可替換單元MRU,當(dāng)查找到此最小可替換單元MRU時,虛擬加載器加載一個代理界面Activity作為代理,并通過類加載器ClassLoader來加載最小可替換單元MRU中的目標(biāo)界面Activity,并把它作為一個普通的,不受界面管理器ActivityManager管理的類;所有目標(biāo)界面Activity中的生命周期通過界面動態(tài)加載代理界面ProxyActivity來實(shí)現(xiàn);當(dāng)目標(biāo)界面Activity請求任何資源時,實(shí)際訪問代理界面ProxyActivity的資源,并重新定向到外部存儲中的資源。所述視圖綁定器的工作流程包括:1)獲得用戶使用注入器注入的實(shí)體O(包括同步響應(yīng)實(shí)體Poster或異步響應(yīng)實(shí)體Director、Loader、Multiple)、資源提供器與數(shù)據(jù)的對應(yīng)關(guān)系矩陣:2)檢查將要綁定的資源是否符合視圖所特定的變量類型;3)將資源提供器所提供的實(shí)體中獲得的資源綁定到指定的視圖中。實(shí)體O的矩陣為:其中,N表示實(shí)體O可能獲取的資源個數(shù);Si表示實(shí)體所請求的資源;Pi表示負(fù)責(zé)將實(shí)體展示到用戶界面Ui中的數(shù)據(jù)提供實(shí)體Presenter;i=1,2,…N。對于任一對用于將數(shù)據(jù)展示到用戶界面中的數(shù)據(jù)提供實(shí)體Presenter和該數(shù)據(jù)展示實(shí)體對應(yīng)的用戶界面U,對應(yīng)關(guān)系矩陣為:其中,Vi是用戶界面中的視圖,F(xiàn)i是實(shí)體O中的成員變量。與現(xiàn)有技術(shù)相比,本發(fā)明所具有的有益效果為:本發(fā)明提出一種基于Android平臺的開發(fā)框架,前端工作人員主要負(fù)責(zé)界面的實(shí)現(xiàn),不需要編寫任何代碼;后端人員負(fù)責(zé)編寫數(shù)據(jù)來源代碼、實(shí)現(xiàn)業(yè)務(wù)邏輯。此框架可以實(shí)現(xiàn)前端數(shù)據(jù)展示和后端業(yè)務(wù)邏輯徹底分離,讓沒有代碼能力的前端參與到開發(fā)中,減少不必要的重復(fù)工作。對于后端人員來說,此框架提供一套前端數(shù)據(jù)獲取流程的抽象,而具體的實(shí)現(xiàn)可以由開發(fā)者選用合適的第三方框架來實(shí)現(xiàn)。同時,作為使用范例,此框架默認(rèn)使用了第三方類庫Volley,ActiveAndroid和UniversalImageLoader來作為具體的實(shí)現(xiàn)。沒有代碼能力的前端人員可以通過GUI控件的拖拽來實(shí)現(xiàn)界面的設(shè)計(jì)同時,通過GUI指定各個控件和服務(wù)端中數(shù)據(jù)的對應(yīng)關(guān)系,實(shí)現(xiàn)數(shù)據(jù)的自動獲取和展示。在這一整個過程中,前端人員不需要寫任何代碼,在運(yùn)行時,數(shù)據(jù)可以自動展示在界面中。本發(fā)明一方面可以減少代碼量,增加代碼可靠性;另一方面可以使邏輯結(jié)構(gòu)變得清晰,將數(shù)據(jù)業(yè)務(wù)流程和其他邏輯(視圖邏輯等)分開,提高代碼的可測試性。附圖說明圖1為本發(fā)明總統(tǒng)架構(gòu)圖;圖2為本發(fā)明資源提供器結(jié)構(gòu)圖;圖3為本發(fā)明URI圖的結(jié)構(gòu)圖;圖4為本發(fā)明第一類替換原理圖;圖5為本發(fā)明第二類替換原理圖;圖6為本發(fā)明Source(資源),Object(實(shí)體)和UserInterface(用戶接口)三者關(guān)系示意圖;圖7(a)為實(shí)體和用戶界面的關(guān)系圖;圖7(b)為符合單一職責(zé)原則的Source(資源),Object(實(shí)體)和UserInterface(用戶接口)三者關(guān)系示意圖。具體實(shí)施方式本系統(tǒng)包含了三個主要部分:1.資源提供器(ResourceProvider),用于負(fù)責(zé)在全局范圍類提供數(shù)據(jù)2.虛擬加載器(VirtualLoader),用于動態(tài)加載dex文件中的類或者外部文件中的類3.視圖綁定器(ViewBinder),是一個可擴(kuò)展的類容器,用于將不同類型的數(shù)據(jù)綁定到對應(yīng)的控件中在此框架之下,UI層獨(dú)立于數(shù)據(jù)層以及模型層。因此,開發(fā)者不需要關(guān)心UI層,以及數(shù)據(jù)是如何展示在UI中。同時,UI開發(fā)人員可以獨(dú)立地開發(fā)出合適的用戶界面,不需要編寫任何代碼。系統(tǒng)的總體架構(gòu)如圖1所示。資源提供器通過職責(zé)鏈模式(ChainofResponsibility)將不同的資源提供器組織起來,任意的資源提供器可以動態(tài)地被加入或刪除。因此,當(dāng)虛擬加載器(VirtualLoader)需要進(jìn)行動態(tài)加載的時候便可以很迅速的通過資源提供器獲取所需資源,并提供給視圖綁定器(ViewBinder)對該數(shù)據(jù)進(jìn)行處理。而且,用戶界面層獨(dú)立于其它層。用戶界面可以從本程序中加載,也可以從外部存儲中加載。換句話話說,用戶界面是在運(yùn)行時決定的。任何一個數(shù)據(jù)實(shí)體都是面向資源(resources-oriented)的。在此架構(gòu)之下,應(yīng)用程序可以在不需要更新全部程序的基礎(chǔ)下進(jìn)行動態(tài)升級。資源提供器的結(jié)構(gòu)如圖2所示。資源提供器使用了職責(zé)鏈模式,每個資源提供器都有一個可為空的上級(successor)。當(dāng)一個資源提供器無法處理某個請求時,它會將這個請求分發(fā)到上級,直到任意一個資源提供器處理了這個請求,或者上級為空。當(dāng)一個實(shí)體從資源提供器中取回了數(shù)據(jù),資源提供器實(shí)際上分別在服務(wù)端,本地存儲,文件系統(tǒng)以及緩存中進(jìn)行存儲。在用戶角度上來看,展示在用戶界面中的數(shù)據(jù)是直接從服務(wù)端、本地、文件系統(tǒng)或者緩存中讀取的。而從開發(fā)者的角度來看,開發(fā)過程是面向抽象的(abstract-oriented),因?yàn)橘Y源提供器是獨(dú)立于業(yè)務(wù)層的,開發(fā)者只需要從資源提供器從獲取數(shù)據(jù)。資源提供器的工作流程:1)資源提供器得到所需加載的數(shù)據(jù)對應(yīng)的URI對于每一個資源提供器,都需要一個特定的URI來加載指定的數(shù)據(jù)。例如,為了可以從服務(wù)端中通過HTTP協(xié)議接收數(shù)據(jù),需要一個符合HTTP協(xié)議的URL。因?yàn)閷?shí)體是獨(dú)立于數(shù)據(jù)提供器的,因此任何需要接收數(shù)據(jù)的實(shí)體需要制定一個URqI(UniformRequestIdentifier)。URImapper會把URqI轉(zhuǎn)換成不同數(shù)據(jù)提供器所需要的URI。這個過程如圖3所示。2)資源提供器根據(jù)對應(yīng)的URI獲取數(shù)據(jù)一般來說,數(shù)據(jù)的獲取過程是耗時的操作,特別是當(dāng)數(shù)據(jù)從服務(wù)端中獲取時,數(shù)據(jù)獲取的速度取決于網(wǎng)絡(luò)帶寬以及服務(wù)端的響應(yīng)時間。為了減少用戶的等待時間,加載的過程總是在非UI線程中進(jìn)行。當(dāng)數(shù)據(jù)加載完成之后,將會發(fā)送一個消息到UI線程隊(duì)列中,并更新UI。為了增強(qiáng)系統(tǒng)可維護(hù)性,本框架提供了異步的接口作為輸入,因而數(shù)據(jù)的加載不需要占用UI線程的時間,提高了用戶體驗(yàn)。在此原則下,提出算法:步驟1)提供統(tǒng)一資源標(biāo)識符URI、接收UI線程回調(diào)的對應(yīng)接口、資源提供器步驟2)通過檢索資源提供器獲得數(shù)據(jù)對象o步驟3)判斷如果該數(shù)據(jù)對象o為空,則從資源提供器中獲取新的替代資源P步驟4)如果資源P為空,則該線程處理失敗步驟5)如果資源P不為空,則處理該數(shù)據(jù)P與UI線程步驟6)如果數(shù)據(jù)對象o不為空,則UI線程處理數(shù)據(jù)對象o3)實(shí)體從資源提供器中取回?cái)?shù)據(jù)進(jìn)行使用對于任意一個資源提供器,都需要處理特定的數(shù)據(jù)并返回特定的數(shù)據(jù)類型。對于同樣的輸入,必然得到相同的輸出。因此,對于任何需要經(jīng)過資源提供器的處理,必須指定一個輸出類型。在Android應(yīng)用中,有兩類最經(jīng)常使用的基礎(chǔ)資源提供器:服務(wù)端資源提供器和本地?cái)?shù)據(jù)庫資源提供器。其中服務(wù)端資源提供器的來源最經(jīng)常采用HTTP協(xié)議;對于后者而言,采用Android系統(tǒng)內(nèi)嵌的小型關(guān)系型數(shù)據(jù)庫SQLite。對于用戶使用注入器注入的實(shí)體,將實(shí)體分為三類:請求-響應(yīng)范式實(shí)體(Poster)、數(shù)據(jù)加載實(shí)體(Director)以及數(shù)據(jù)獲取實(shí)體(Multiple)。對于這三類實(shí)體分別進(jìn)行具體的實(shí)現(xiàn)。這些實(shí)體對象會在虛擬加載器(VirtualLoader)加載的交互界面activity調(diào)用具體業(yè)務(wù)所需要的時候,由資源提供器提供出來并使用。在Android系統(tǒng)中,啟動activity的方法由Intent指定目標(biāo)activity來實(shí)現(xiàn)。虛擬加載器的工作流程如下:1)用戶調(diào)用本框架重寫的方法來啟動Activity虛擬加載器需要根據(jù)不同的最小可替換單元MRU動態(tài)加載界面activity,因此本框架重寫了啟動界面activity的方法,提供了接口:startActivity(Contextcontext,Stringpkg,Stringactivity)該接口的參數(shù)描述如表1所示:表1參數(shù)描述表context上下文環(huán)境pkg目標(biāo)activity的包名activity目標(biāo)activity的名稱當(dāng)用戶調(diào)用了此接口時,虛擬加載器會根據(jù)界面(activity)名稱中最小可替換單元(MRU)數(shù)據(jù)庫中進(jìn)行查詢,如果本地中存在此MRU,則加載該MRU,否則,執(zhí)行原有activity。2)根據(jù)不同類別的最小可替換單元(MRU),分別進(jìn)行不同的處理(1)第一類替換開發(fā)者需要某個資源時,例如,用戶界面中的某個控件,需要在Java文件中通過該索引系統(tǒng)獲得這個資源的引用。因?yàn)閼?yīng)用程序不清楚外部的資源,所以使用索引系統(tǒng)會導(dǎo)致資源替換的失效。因此,對于第一類替換,繞過索引系統(tǒng),使用一個標(biāo)識符(identifier)來對資源進(jìn)行重新導(dǎo)向。該過程如圖4所示。由于資源id在不同上下文中對應(yīng)的控件不同,因此,實(shí)現(xiàn)第一類替換的MRU模塊必須使用對象名綁定。在一個界面(Activity)中,虛擬加載器會將資源重新導(dǎo)向到最小可替換單元(MRU)所在的外部存儲中。這個MRU包含了用于替換應(yīng)用程序中原有的布局資源。當(dāng)應(yīng)用程序查找此布局文件時,虛擬加載器會重新導(dǎo)向到MRU中的布局,并且通過標(biāo)識符(identifier)來加載該布局。(2)第二類替換對于第二類的替換(Activity替換),通過類加載器(ClassLoader)來加載外部存儲空間中的目標(biāo)界面(TargetActivity)。如圖5所示,當(dāng)應(yīng)用程序需要加載一個特定的Activity時,虛擬加載器會在本地?cái)?shù)據(jù)庫中查找是否有相應(yīng)的MRU。當(dāng)查找到此MRU時,虛擬加載器會加載一個代理Activity(ProxyActivity)作為代理,并通過ClassLoader來加載MRU中的目標(biāo)Activity,并把它作為一個普通的,不受ActivityManager管理的類。所有TargetActivity中的生命周期是通過代理界面(ProxyActivity)來實(shí)現(xiàn)的。當(dāng)TargetActivity請求任何資源時,它會實(shí)際訪問ProxyActivity的資源,并重新定向到外部存儲中的資源。虛擬加載器(VirtualLoader)是連接資源提供器和視圖綁定器的橋梁,在虛擬加載器動態(tài)加載交互界面(activity)的同時,視圖綁定器需要將這個activity所要展示的數(shù)據(jù)綁定到對應(yīng)的組件上,這些數(shù)據(jù)便是通過資源提供器所提供的實(shí)體中獲取。數(shù)據(jù)來源(Source),實(shí)體(Object)和用戶界面(UserInterface)三者的關(guān)系如圖6所示。對于每個實(shí)體,都有一個或多個數(shù)據(jù)來源以及用戶界面與之相對應(yīng)。數(shù)據(jù)綁定器工作流程:1)獲得實(shí)體O、資源提供器P與數(shù)據(jù)S的對應(yīng)關(guān)系矩陣把為任意一個實(shí)體O希望獲取的資源定義為S,并把數(shù)據(jù)提供實(shí)體Presenter(P)定義為負(fù)責(zé)將成員F綁定到對應(yīng)用戶界面U中對應(yīng)的視圖V。任意一個實(shí)體O可以從多個資源S中加載數(shù)據(jù),并通過不同的Presenter,展示在不同的視圖V中。因此,得到實(shí)體O的矩陣:此處的N表示這個實(shí)體O可能獲取的資源個數(shù)。例如一個聯(lián)系人的實(shí)體既可能是從云端A中獲取并展示到界面A,又可以是從云端B中獲取并展示到界面B。Si表示實(shí)體所請求的資源。Pi表示負(fù)責(zé)將實(shí)體展示到用戶界面Ui中的數(shù)據(jù)提供實(shí)體Presenter.對于任意一對{P,U},可以定義矩陣P為其中,Vi是用戶界面中的視圖,F(xiàn)i是實(shí)體中的成員變量。2)檢查將要綁定的資源是否符合視圖所特定的變量類型在數(shù)據(jù)展示實(shí)體(Presenter)中,對于任意一個方法所返回的值都被綁定到了注解(annotation)所指定的視圖中。該返回值有多種類型,例如數(shù)組,字符串,整型,布爾值等;同時視圖也可能是文本框,圖片框,勾選框,列表等。特定的視圖只能支持特定的變量類型。例如,數(shù)組類型的變量可以在列表中展示,而布爾變量則不行;而布爾變量可以展示在勾選框中,但是數(shù)組變量不行。為了保證特定的變量不被展示到錯誤的視圖中,在視圖綁定之前,需要對變量類型進(jìn)行檢查。這個過程如算法所描述:步驟1)遍歷每一個提供器所給出的方法步驟2)如果該方法M內(nèi)存在注釋A,則得到這個注釋的值ID步驟3)得到方法M的返回值value步驟4)在用戶接口中通過ID找到對應(yīng)的視圖V步驟5)檢查返回值value類型,如果正確則將返回值value賦予給視圖V,如不正確則拋出警告步驟6)繼續(xù)檢查下一個提供器中的方法3)將實(shí)體獲得的資源綁定到指定的視圖中資源提供器會把視圖綁定器所需使用的數(shù)據(jù)注入到不同的實(shí)體中,在實(shí)體獲取到資源后,這個實(shí)體會展示到用戶界面中。為了將資源中特定的成員綁定到指定的視圖中,通過注解(annotation)的方式來將實(shí)體中的成員變量綁定到用戶界面中的特定視圖中。在某些情況下,實(shí)體同時也是數(shù)據(jù)展示實(shí)體(Presenter),因此實(shí)體和用戶界面的關(guān)系是一對一的,如圖7(a)所示。在其他一些情況下,比如一個實(shí)體可能對應(yīng)多個資源,并需要展示在不同的用戶界面中,因此,為了符合單一職責(zé)原則(SingleResponsibilityPrinciple,SRP),需要一個Presenter來將實(shí)體展示到用戶界面中,如7(b)所示。當(dāng)前第1頁1 2 3 
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
恩平市| 青州市| 武定县| 德钦县| 桦甸市| 固安县| 中阳县| 东乌珠穆沁旗| 钟山县| 镇康县| 神木县| 威信县| 正宁县| 醴陵市| 乡城县| 曲靖市| 九龙县| 百色市| 枣阳市| 龙游县| 安新县| 阿图什市| 石泉县| 平乐县| 封丘县| 康保县| 鹤壁市| 晋城| 西和县| 兴国县| 横山县| 乌兰浩特市| 海淀区| 孝感市| 三门县| 马边| 三门峡市| 综艺| 遂昌县| 阜南县| 潮州市|