Posted on 2007-11-25 23:37
canonical 閱讀(1183)
評(píng)論(0) 編輯 收藏 所屬分類:
設(shè)計(jì)理論
判斷和循環(huán)是程序中最基本的語句結(jié)構(gòu)。而在vonNeumann體系架構(gòu)下,循環(huán)是對(duì)集合進(jìn)行操作所需的基本步驟。一個(gè)有趣的事實(shí)是,函數(shù)式語言所宣稱的
生產(chǎn)力的來源很大程度上在于集合操作的便捷性。在數(shù)學(xué)中我們通過張量分析,泛函分析等可以清楚地意識(shí)到集合之間的相互作用是可抽象的,是可以獨(dú)立理解的,
即我們可以在不涉及具體基元結(jié)構(gòu)的層面上獨(dú)立的定義并執(zhí)行集合運(yùn)算。如何將這種概念獨(dú)立性在框架層面展開是一個(gè)非常深刻的命題。
在基元結(jié)構(gòu)上應(yīng)用基礎(chǔ)操作p(d)這一微觀場景一般情況下是容易理解并實(shí)現(xiàn)的, 但通常程序中所定義的大量邊界是基于集合變量的,
因此很多代碼都是封包和解包操作, 在層層嵌套的循環(huán)結(jié)構(gòu)深處我們才能發(fā)現(xiàn)真正具有業(yè)務(wù)價(jià)值的基元結(jié)構(gòu).
將集合操作提升到系統(tǒng)層,減少或簡化在應(yīng)用層需要顯式編制的循環(huán)結(jié)構(gòu)是框架設(shè)計(jì)層面需要考慮的問題.
一個(gè)最基本的方法是盡量定義通用的同構(gòu)操作, 避免構(gòu)造中間集合. 例如前后臺(tái)之間通過json等通用協(xié)議交換復(fù)雜結(jié)構(gòu)的對(duì)象,
避免定義特殊的中間處理過程. 一個(gè)與之相配合的重要技術(shù)手段是通過類查詢語句(描述方式)直接構(gòu)造特定的集合.
例如prototype.js中提供的$$('div
div.myclass').each(op)這樣的處理方式顯然要比在循環(huán)過程中基于特定條件過濾要方便的多.
而在AOP操作中切點(diǎn)的集合定義方式也是其提供的核心價(jià)值之一. 與集合操作相適應(yīng)的一種代碼風(fēng)格是流式設(shè)計(jì)(stream),
這正是jQuery試圖鼓吹的主要價(jià)值(雖然我個(gè)人認(rèn)為它有些走極端). 流式設(shè)計(jì)的核心結(jié)構(gòu)實(shí)際上是 x += dx,
它不需要集合是一次性構(gòu)造的, 便于支持一種逐步部分修正的概念模型.
為了支持集合的隱式構(gòu)造, 我們需要以通用的方式定義元素到集合的組裝規(guī)則.
在Witrix平臺(tái)的前臺(tái)js框架中我們定義了由獨(dú)立的html組件到復(fù)合查詢條件的拼接規(guī)則,
定義了由每個(gè)html組件的數(shù)據(jù)校驗(yàn)函數(shù)到整個(gè)form的數(shù)據(jù)校驗(yàn)函數(shù)之間的組裝規(guī)則,
定義了由單個(gè)html組件提交參數(shù)到整個(gè)form提交參數(shù)之間的組裝規(guī)則. 在Witrix平臺(tái)的標(biāo)準(zhǔn)界面上,
框架本身的編制基于js.query.buildCondition(frmQuery),
js.validate.validateForm(frmUpdate), ajax.addForm(frmUpdate)等少量集合操作進(jìn)行,
在不同的應(yīng)用場景下, 我們只需要關(guān)心每一個(gè)字段如何顯示, 提交哪些屬性, 而由系統(tǒng)負(fù)責(zé)將它們自動(dòng)組裝并在后臺(tái)進(jìn)行分派. 面向不同的應(yīng)用,
框架代碼不需要做出任何修改, 確保了系統(tǒng)結(jié)構(gòu)的可重用性.
Witrix平臺(tái)的后臺(tái)處理模型中定義了實(shí)體化過程, DaoWebAction基于CRUD等原子操作定義了批量提交,
數(shù)據(jù)導(dǎo)入導(dǎo)出等復(fù)合的甚至是嵌套的集合操作. 在不同的應(yīng)用中, 我們通過修改bizflow文件中<action
id="ViewDetail-default">, <action
id="Update-default">等針對(duì)單實(shí)體的業(yè)務(wù)規(guī)則即可適應(yīng)不同的業(yè)務(wù)場景, 而不需要為特定的應(yīng)用重復(fù)編制集合處理過程.
面向集合+通用組裝規(guī)則是Witrix平臺(tái)設(shè)計(jì)中采用的基本設(shè)計(jì)手法之一,
它使得我們?cè)谝话銘?yīng)用中只需要考慮單實(shí)體,單字段等基元結(jié)構(gòu)上發(fā)生的特定業(yè)務(wù), 大大簡化了系統(tǒng)構(gòu)造過程.
但是也需要認(rèn)識(shí)到從個(gè)體到集合的擴(kuò)張(p(d) -> P(D) )是非平凡的, 集合比個(gè)體的簡單加和要更多,
為此架構(gòu)中需要保留對(duì)集合邊界的識(shí)別能力, 例如需要允許在數(shù)據(jù)導(dǎo)入完成之后執(zhí)行特定的業(yè)務(wù)規(guī)則而不是僅僅針對(duì)每一數(shù)據(jù)行執(zhí)行業(yè)務(wù)規(guī)則.