posts - 176, comments - 240, trackbacks - 0, articles - 7
              判斷和循環(huán)是程序中最基本的語(yǔ)句結(jié)構(gòu)。而在vonNeumann體系架構(gòu)下,循環(huán)是對(duì)集合進(jìn)行操作所需的基本步驟。一個(gè)有趣的事實(shí)是,函數(shù)式語(yǔ)言所宣稱的 生產(chǎn)力的來(lái)源很大程度上在于集合操作的便捷性。在數(shù)學(xué)中我們通過(guò)張量分析,泛函分析等可以清楚地意識(shí)到集合之間的相互作用是可抽象的,是可以獨(dú)立理解的, 即我們可以在不涉及具體基元結(jié)構(gòu)的層面上獨(dú)立的定義并執(zhí)行集合運(yùn)算。如何將這種概念獨(dú)立性在框架層面展開(kāi)是一個(gè)非常深刻的命題。
              在基元結(jié)構(gòu)上應(yīng)用基礎(chǔ)操作p(d)這一微觀場(chǎng)景一般情況下是容易理解并實(shí)現(xiàn)的, 但通常程序中所定義的大量邊界是基于集合變量的, 因此很多代碼都是封包和解包操作, 在層層嵌套的循環(huán)結(jié)構(gòu)深處我們才能發(fā)現(xiàn)真正具有業(yè)務(wù)價(jià)值的基元結(jié)構(gòu). 將集合操作提升到系統(tǒng)層,減少或簡(jiǎn)化在應(yīng)用層需要顯式編制的循環(huán)結(jié)構(gòu)是框架設(shè)計(jì)層面需要考慮的問(wèn)題.
              一個(gè)最基本的方法是盡量定義通用的同構(gòu)操作, 避免構(gòu)造中間集合. 例如前后臺(tái)之間通過(guò)json等通用協(xié)議交換復(fù)雜結(jié)構(gòu)的對(duì)象, 避免定義特殊的中間處理過(guò)程. 一個(gè)與之相配合的重要技術(shù)手段是通過(guò)類查詢語(yǔ)句(描述方式)直接構(gòu)造特定的集合. 例如prototype.js中提供的$$('div div.myclass').each(op)這樣的處理方式顯然要比在循環(huán)過(guò)程中基于特定條件過(guò)濾要方便的多. 而在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)用場(chǎ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í)體化過(guò)程, DaoWebAction基于CRUD等原子操作定義了批量提交, 數(shù)據(jù)導(dǎo)入導(dǎo)出等復(fù)合的甚至是嵌套的集合操作. 在不同的應(yīng)用中, 我們通過(guò)修改bizflow文件中<action id="ViewDetail-default">, <action id="Update-default">等針對(duì)單實(shí)體的業(yè)務(wù)規(guī)則即可適應(yīng)不同的業(yè)務(wù)場(chǎng)景, 而不需要為特定的應(yīng)用重復(fù)編制集合處理過(guò)程.
              面向集合+通用組裝規(guī)則是Witrix平臺(tái)設(shè)計(jì)中采用的基本設(shè)計(jì)手法之一, 它使得我們?cè)谝话銘?yīng)用中只需要考慮單實(shí)體,單字段等基元結(jié)構(gòu)上發(fā)生的特定業(yè)務(wù), 大大簡(jiǎn)化了系統(tǒng)構(gòu)造過(guò)程. 但是也需要認(rèn)識(shí)到從個(gè)體到集合的擴(kuò)張(p(d) -> P(D) )是非平凡的, 集合比個(gè)體的簡(jiǎn)單加和要更多, 為此架構(gòu)中需要保留對(duì)集合邊界的識(shí)別能力, 例如需要允許在數(shù)據(jù)導(dǎo)入完成之后執(zhí)行特定的業(yè)務(wù)規(guī)則而不是僅僅針對(duì)每一數(shù)據(jù)行執(zhí)行業(yè)務(wù)規(guī)則.
          主站蜘蛛池模板: 始兴县| 漯河市| 堆龙德庆县| 志丹县| 剑阁县| 平和县| 揭东县| 梅河口市| 长岛县| 镇沅| 策勒县| 左贡县| 平邑县| 尉氏县| 霍山县| 海林市| 岳普湖县| 宣汉县| 扎赉特旗| 突泉县| 霍城县| 罗定市| 屯门区| 武宣县| 鄂伦春自治旗| 孟村| 临沂市| 邵阳市| 德惠市| 平遥县| 那坡县| 岚皋县| 新巴尔虎左旗| 竹山县| 平安县| 西城区| 长春市| 嘉定区| 宝山区| 多伦县| 皮山县|