posts - 176, comments - 240, trackbacks - 0, articles - 7
              判斷和循環(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ī)則.
          主站蜘蛛池模板: 汉寿县| 镇雄县| 额尔古纳市| 宁安市| 蒲城县| 商水县| 黔南| 潮州市| 吉木萨尔县| 凤冈县| 新平| 尤溪县| 青州市| 曲阜市| 沈丘县| 登封市| 山东省| 砀山县| 静乐县| 政和县| 阿巴嘎旗| 福州市| 乌拉特后旗| 张家港市| 寿阳县| 疏勒县| 黄山市| 高唐县| 凉城县| 陆良县| 金寨县| 南充市| 临西县| 治县。| 凤冈县| 沁源县| 清水河县| 永修县| 东阿县| 郓城县| 大悟县|