posts - 176, comments - 240, trackbacks - 0, articles - 7

          ??? 目前的框架設(shè)計(jì)中,引入元數(shù)據(jù)(metadata)已經(jīng)是必然的事情,jdk5.0的annotation機(jī)制也為metadata的物理駐留位置提供了新的選擇。常見的一些元數(shù)據(jù)設(shè)計(jì)方案中往往是元數(shù)據(jù)直接驅(qū)動(dòng)系統(tǒng)的展現(xiàn)甚至運(yùn)行過程(例如普元EOS),大有完全取代程序代碼的趨勢(shì),這無(wú)疑是對(duì)元數(shù)據(jù)概念的一種濫用。一般在界面層所使用的元數(shù)據(jù)其實(shí)類似于某種新的界面描述語(yǔ)言,即某種特定目的的DSL(domain specific language). 但這種描述一般是不完備的, 一旦遇到擴(kuò)展情況, 往往需要很多額外的工作。
          ??? 實(shí)際上并不是所有信息都要在獨(dú)立的xml 中描述, 前臺(tái)模板頁(yè)面本身就可以是一種元數(shù)據(jù), 前臺(tái)元素之間的關(guān)聯(lián)已經(jīng)隱含表達(dá)了多種關(guān)系, 不需要把這些關(guān)聯(lián)再在額外的xml文件中重復(fù).? 比如說(shuō)一個(gè)數(shù)據(jù)集展現(xiàn)在頁(yè)面上的時(shí)候需要支持幾種操作,即對(duì)應(yīng)的需要顯示幾個(gè)按鈕. 在witrix平臺(tái)的tpl模板中, 我們的調(diào)用方式大概如下
          ??????? <ui:EditTable pager="${pager}" dsMeta="${dsMeta}">
          ??????? <buttons>
          ????????? <ui:RemoveRowButton/>
          ????????? <ui:EditRowButton/>
          ??????? </buttons>
          ??????? </ui:EdiTable>
          ??? 操作集合這一信息僅在模板中表達(dá)一次.? 實(shí)際上很多時(shí)候, 不同的界面我們需要展示不同的操作集合, 它本身并不一定是數(shù)據(jù)集內(nèi)在的性質(zhì). 數(shù)據(jù)集的屬性只能是支持全部操作的集合, 它并不需要直接對(duì)應(yīng)到界面上. 對(duì)于多個(gè)界面我們需要盡量共用一個(gè)meta配置.

          ??? 在witrix平臺(tái)的元數(shù)據(jù)方案中,關(guān)鍵是采用pull mode, 由前臺(tái)模板系統(tǒng)驅(qū)動(dòng), 模板決定使用何種資源(包括元數(shù)據(jù)),而不是由元數(shù)據(jù)驅(qū)動(dòng)整個(gè)系統(tǒng)的展現(xiàn)。當(dāng)一個(gè)元數(shù)據(jù)條目不適用的時(shí)候我們可以忽略它,但是仍然可以使用元數(shù)據(jù)配置中的其他部分。這與我們的jsplet web框架的設(shè)計(jì)是一脈相承的。

          ??? 元數(shù)據(jù)的駐留形式本身也是很有意思的問題。假設(shè)現(xiàn)在我們需要描述如下信息:本字段采用input框顯示,它有一個(gè)參數(shù)value. 它的meta形式可以如下,
          ?????? <inputor type="TextInput">
          ????????? <arg name="value" />
          ?????? </inputor>
          ??? 我們也可以選擇如下形式
          ?????? <inputor>
          ??????? <input type="text" value="${value}" />
          ?????? </inputor>
          ??? 第二種方式的特殊之處是它選擇了與html規(guī)范本身兼容的表達(dá)形式,即寄生于html格式之中。這種設(shè)計(jì)的好處在于我們只需要一個(gè)通用的模板引擎,而不需要任何特定于該控件的解析器,就可以產(chǎn)生最終所需的文本輸出。這種元數(shù)據(jù)表達(dá)方式更重要的地方在于它是導(dǎo)向更高復(fù)雜性層次的自然途徑。例如我們現(xiàn)在需要一種更加復(fù)雜的自定義控件來(lái)顯示該字段,則
          ?????? <inputor>
          ??????? <ui:DateInputor value="${value}" />
          ?????? </inputor>

          ??? 在元數(shù)據(jù)的設(shè)計(jì)中,適可而止永遠(yuǎn)都是我們需要銘記在心的核心原則。對(duì)元數(shù)據(jù)描述的范圍要適可而止,不要試圖包羅萬(wàn)象。例如,在界面元數(shù)據(jù)的設(shè)計(jì)中不要對(duì)于數(shù)據(jù)供體有任何假定。一個(gè)前臺(tái)表格,無(wú)論它的數(shù)據(jù)是數(shù)據(jù)庫(kù)中的一組記錄, 還是通過pop3協(xié)議收取的一組信件,應(yīng)該都不影響它對(duì)于meta的使用。元數(shù)據(jù)引擎所能夠直接理解的粒度也要適可而止。在witirx平臺(tái)的元數(shù)據(jù)方案中,viewer和inputor等配置段其實(shí)是由tpl模板引擎負(fù)責(zé)解析的,在DataSourceMeta的解析器并不能識(shí)別其中的細(xì)節(jié),它也不需要識(shí)別其中的細(xì)節(jié)。

          Feedback

          # re: 關(guān)于元數(shù)據(jù)(metadata)設(shè)計(jì)  回復(fù)  更多評(píng)論   

          2006-03-25 12:17 by 非魚
          普元的EOS我看過,顯然它誤用了CBD的概念。另外好象還有一個(gè)總線的概念,很滑稽:什么時(shí)候見過現(xiàn)實(shí)系統(tǒng)中有一個(gè)人或一個(gè)機(jī)制總理所有數(shù)據(jù)/信息傳遞?即使最接近的電話系統(tǒng),我從廣州打電話到北京,會(huì)用上海到西安的“總線”嗎?

          ——不好意思,和你的內(nèi)容離題太遠(yuǎn)了~~~

          # re: 關(guān)于元數(shù)據(jù)(metadata)設(shè)計(jì)  回復(fù)  更多評(píng)論   

          2006-05-29 16:18 by 老鼠
          不錯(cuò),我把您這篇也轉(zhuǎn)走了:p
          主站蜘蛛池模板: 汨罗市| 弥勒县| 陇西县| 承德市| 海淀区| 浑源县| 南漳县| 思南县| 阿克| 布尔津县| 荥阳市| 大埔区| 右玉县| 锦州市| 康平县| 潞城市| 读书| 迭部县| 德钦县| 普安县| 金寨县| 永春县| 涿鹿县| 德格县| 岢岚县| 柏乡县| 武胜县| 峨边| 开封市| 屏边| 松原市| 广元市| 盘锦市| 桃江县| 洛南县| 福鼎市| 通江县| 伊金霍洛旗| 平利县| 和政县| 沙雅县|