Posted on 2007-01-21 18:11
canonical 閱讀(2525)
評(píng)論(5) 編輯 收藏 所屬分類(lèi):
設(shè)計(jì)理論
?????? 代碼生成現(xiàn)在已經(jīng)逐漸成為軟件開(kāi)發(fā)中的一種標(biāo)準(zhǔn)技術(shù),在眾多的軟件領(lǐng)域都大大減輕了我們重復(fù)勞動(dòng)的工作量。程序中總是存在著這樣那樣的隱蔽的關(guān)聯(lián),它們無(wú)法在通用的程序語(yǔ)言框架下得到明確的表達(dá),代碼生成是我們突破既定的語(yǔ)言和框架限制的一種重要手段。但是代碼生成也存在著嚴(yán)重的弊病,一方面一般的程序語(yǔ)言在設(shè)計(jì)時(shí)沒(méi)有考慮到和代碼生成工具的相互配合,因此生成代碼是一次性的,代碼生成工具無(wú)法以增量的方式修正已經(jīng)生成的代碼。另一方面,程序的結(jié)構(gòu)是復(fù)雜的,代碼生成工具一般基于某種簡(jiǎn)化的通用的程序模型(例如CRUD)來(lái)產(chǎn)生代碼,它無(wú)法承載完整的程序結(jié)構(gòu),因此代碼生成后手工調(diào)整量仍然很大,有的時(shí)候甚至為了微小的界面調(diào)整,將生成的代碼修改的面目全非,無(wú)法發(fā)揮代碼生成的優(yōu)勢(shì)。
?????? 在witrix平臺(tái)中主要使用meta generation而不是code generation. meta實(shí)際上是對(duì)一種定制模型(model)的描述,它在某種意義上可以看作是完整程序的簡(jiǎn)化版本,但它本身并不意味著最終的程序結(jié)構(gòu)。在witrix平臺(tái)各處meta的使用都是可選的, 特別是在多變的前臺(tái)頁(yè)面,我們可以選擇根據(jù)meta描述自動(dòng)生成界面,也可以選擇通過(guò)<df:Field name="字段名"/>來(lái)引用單個(gè)字段的meta數(shù)據(jù). 在witrix平臺(tái)中, meta可以看作是系統(tǒng)運(yùn)行的內(nèi)核, 它通過(guò)syncWithModel等屬性與設(shè)計(jì)工具發(fā)生耦合. 當(dāng)設(shè)計(jì)模型修改之后, 這種修改能夠以增量的形式通過(guò)可控制(修改)的信道傳播到系統(tǒng)各處.
Feedback
有witrix平臺(tái)的DEMO可以看嗎?非常感興趣
呵呵,公司里也做這樣的實(shí)踐!果然都是地球人,大家思路最后都差不多!
呵呵,和我們CowNew的CowNewPIS平臺(tái)中的元數(shù)據(jù)引擎思想非常類(lèi)似。
http://www.cownew.com/CowNewPIS/
witrix中meta的思想與一般人的第一感覺(jué)還是有著本質(zhì)區(qū)別的。在witrix中,典型的開(kāi)發(fā)過(guò)程是通過(guò)powerdesigner設(shè)計(jì)數(shù)據(jù)模型,然后自動(dòng)生成meta數(shù)據(jù),此時(shí)對(duì)于數(shù)據(jù)庫(kù)的增刪改查就可以進(jìn)行了,包括對(duì)于one-to-one,one-to-many,many-to-many等關(guān)系的維護(hù),高級(jí)查詢條件的拼裝,導(dǎo)入導(dǎo)出功能等。這些設(shè)計(jì)因?yàn)榛贠RM模型,因此并不是僅僅針對(duì)單表的,而是可以很方便的處理關(guān)聯(lián)表的情況。
如果界面沒(méi)有特殊要求,一般最多調(diào)整一下meta中字段的屬性。如果完全要求定制布局,則在前臺(tái)通過(guò)<df:Field name="fieldName"/>等標(biāo)簽引入字段元數(shù)據(jù),增刪改界面可以共用一個(gè)定制頁(yè)面。而后臺(tái)依據(jù)meta對(duì)前臺(tái)提交數(shù)據(jù)進(jìn)行初步處理。在witrix的開(kāi)發(fā)過(guò)程中,幾乎不需要調(diào)用get/set方法,也不需要調(diào)用session.save, session.update等方法,前臺(tái)也幾乎不編制完整的界面。
to mixlee: 我們目前無(wú)意成為平臺(tái)軟件供應(yīng)商,因此不對(duì)外提供witrix的資料。
Template其實(shí)也可以看做是MetaData,只不過(guò)Template通常是基于某一個(gè)特定場(chǎng)景,描述的元信息的確是不夠豐富的,如果要足夠豐富,Template必定會(huì)加雜很多邏輯。
而真正的元數(shù)據(jù)驅(qū)動(dòng)的應(yīng)用,在軟件業(yè)也隨處可見(jiàn)。工作流程描述語(yǔ)言,頁(yè)面流程描述語(yǔ)言,HBM映射文檔都是元數(shù)據(jù)驅(qū)動(dòng),歸納起來(lái),都是在運(yùn)行時(shí)通過(guò)引擎渲染元數(shù)據(jù)摸板。嚴(yán)格分離Design time MetaData和Run time engine。這所帶來(lái)的益處也不是代碼生成能達(dá)到的。以下省略文字3000...
還有一點(diǎn)我覺(jué)的非常重要,就是你的工具/平臺(tái)面向的群體。這會(huì)直接影響設(shè)計(jì)和實(shí)現(xiàn)的方式。以及是否考慮到了升級(jí)。希望有機(jī)會(huì)可以交流。