哪吒2之魔童闹海|哪吒2之魔童归来免费观看|哪吒2在线观看|哪吒2魔童闹海电影免费观看|哪吒2免费观看完整版大电影|哪吒1免费观看完整版

新疆軟件開發(fā)

本站首頁 軟件開發(fā) 成功案例 公司新聞 公司簡介 客服中心 軟件技術 網(wǎng)站建設
  您現(xiàn)在的位置: 新疆二域軟件開發(fā)公司 >> 開發(fā)語言 >> 文章正文

根本解決軟件開發(fā)框架的侵入性問題

 

       軟件開發(fā)框架之所以跟侵入性糾纏不清, 根本的原因還是框架要支持應用的某種/某些邏輯和功能, 可以說是部分的去實現(xiàn)應用的目標. 但是這些功能如果不能讓應用去定制, 其現(xiàn)實應用代價就又很微渺了. 所以框架是需要和應用交流的, 而交流的主要目的是為了定制.

想到這個地方, 我的反應是聲明式編程, 讓應用通過某種方式表達出自己的定制需求, 這個表達的方式就可以是多種多樣的了: 通過遵循約定, 繼承特定框架基類, 實現(xiàn)特定框架接口, 標注Annotation, 編寫配置文件, 調(diào)用框架API, 等等.

而像Java這樣的靜態(tài)語言所能支持的表達方式, 無論怎么看都可以掛上 "侵入性" 的標簽, 因為如果框架一旦定了它要求應用采納的方式, 應用就得跟著它走. 在應用需求表達方式問題上, 框架之間的相容性既沒有理論研究, 更沒有實踐習慣.

這里提到 "框架的侵入性" 好像用的是它最寬泛的涵義, 就是對應用編程行為的影響. 要是這么說任何框架都不可能沒有侵入性了, 只是有些讓應用開發(fā)人員的日子很難過, 有些則好一點. 不過以目前的軟件體系局勢來看, 絕對的 "侵入性" 問題還沒有辦法解決, 更現(xiàn)實一點, 似乎只有它對單元化開發(fā)和測試的影響比較有可能解決, 眼下討論才比較有現(xiàn)實意義.

不過對下一代軟件框架體系, 我倒是感到有些期望, 隨著Annotation的成熟和普及, 對于基于Java的開發(fā)來說, 我覺得這個趨勢已經(jīng)臨近了. 我的想法是可以運用一下逆向思維, 既然應用與框架的交互無可避免, 那么與其被動的接受框架的 "侵入" 不如由應用自身采取主動行為, 進行 "引入".

應用的主動引入可以從已有的 聲明式編程 出發(fā), 對于比較大的綜合應用方向, 比如 Web應用, 以制定通用的應用需求表達規(guī)范為手段, 通過公開的規(guī)范, 協(xié)調(diào)應用程序和系統(tǒng)框架之間的交流. 這聽起來就是JCP要為JavaEE做的事情, 是的, 以截至到目前的軟件體系局勢, 這個事情還不得不由人力, 物力, 財力豐厚的商業(yè)實體去完成, 它們也必須在這個領域有足夠的商業(yè)利益吸引也才有動力去做.

但是同樣是JCP出來的J2EE規(guī)范, Servlet很成功, 而EJB卻不是. 并且Servlet很好的解決了它那個年代的Web開發(fā)問題, 而軟硬件的發(fā)展所推動出來的新需求, 新問題又飛快增長, 對新規(guī)范的需求不僅是本身增長很快, 它的增長速度也會隨著時間增長. JCP已經(jīng)開始顯得笨拙且乏力了.

一個本質(zhì)性的問題是: 目前的規(guī)范是基于少量編程語言API的大部分的自然語言描述. 基于這樣的模式, 成本太高, 就算是目前的大型開源社區(qū)要開發(fā)自己的體系規(guī)范也會是難上加難.

在這個方向上, DSL(Domain Specific Language)是個很好的創(chuàng)意, 可以有針對性的簡化專門領域的規(guī)約方式. 不過, 我覺得還有DSL沒有特別關注的一點, 就是同一種語言中聲明與實現(xiàn)語法的分離與融匯:
  DSL傾向于作為一種聲明式的語言, 被設計為獨立使用, 它很可能由另一種通用語言進行解釋而實現(xiàn). 它的語法很可能可以直接調(diào)用實現(xiàn)語言, 但很難變成編寫應用所用語言的一部分. (我很期望它變成應用代碼的聲明部分)

回到解決侵入性的問題上來, 我設想的方式是目前還沒有的, 至少還沒有系統(tǒng)化. 那就是可以用一種語法給應用編程語言增加用于聲明的語法, 同時這種語法也照顧到給應用聲明的需求提供實現(xiàn)的系統(tǒng)編程語言語法, 從而這樣的語法可以同時 表達/約束/支持 應用聲明和系統(tǒng)實現(xiàn).

看上去動態(tài)語言在這個方向上有最深厚的長遠潛力, 不過用于有分析需求的通用工業(yè)開發(fā)領域, 動態(tài)語言要走的路還有點長.

目前基于Java的開發(fā), 利用起Annotation機制會在這個方向上有長足進展, 應用通過引用標注來聲明需求, 系統(tǒng)在編譯時通過Annotation Processor以及Language Model, 在運行時通過反射, 兩者結(jié)合起來去理解和實現(xiàn)應用的需求. 而定義和引用Annotation都受到新增的Java語法約束.
不過基于Annotation機制的 應用/系統(tǒng) 交流有時候還是需要一些自然語言描述的規(guī)范, 好在這個已經(jīng)比純粹描述/理解大篇的約定和接口調(diào)用邏輯順序簡易多了. 同時Annotation引用只能放在modifier的位置還是一個過大的約束, 這個還需要Java語言進一步的演進去解決.

總結(jié)下來, 系統(tǒng)框架通過 "侵入" 要達到的 應用定制 目的是不可避免的, 而要解決被動的受到 "侵入" 的局面, 我所能想到的最好方法就是去主動 "引入". 而 "引入" 所能達到的 "主動" 程度取決于其方式方法的靈活程度和負面影響大小. 當應用的特定需求可以通過統(tǒng)一的(聲明)方式利用大多不同系統(tǒng)(包括測試時的Mock系統(tǒng))而實現(xiàn)時, 應用的 "引入" 行為也就達到了一個比較理想的主動程度, 從而可以視為沒有被特定系統(tǒng) "侵入" 了

作者:baocl | 文章來源:賽迪網(wǎng)技術社區(qū) | 更新時間:2007-10-25 11:44:32

  • 上一篇文章:

  • 下一篇文章:

  • 相關文章:
    JAVA開發(fā)的6個實踐的例子
    JAVA中的抽象類型的一些概念
    java語言開發(fā)程序中的幾個例子大家看看
    了解java開發(fā)語言在軟件開發(fā)中的幾個誤區(qū)
    如何才能使用Java實現(xiàn)內(nèi)部領域的特定語言
    Java開發(fā)學習小心使用Date以及Time類
    sun最近修補了一部分java的安全補丁
    Java程序員應該了解那些開源協(xié)議
    java性能優(yōu)化的一些見解
    解析c#語言和java語言最相似的地方
    軟件技術
    · 開發(fā)語言
    · Java技術
    · .Net技術
    · 數(shù)據(jù)庫開發(fā)
    最新文章  
    ·搜集整理的asp.net的驗證方
    ·各種FOR循環(huán)結(jié)構(gòu)的整理
    ·軟件項目開發(fā)中應該考慮那
    ·搜集整理的javascript sel
    ·軟件開發(fā)中項目經(jīng)理有那些
    ·學習如何在Lambda表達式進
    ·C++基礎知識:結(jié)構(gòu)體數(shù)據(jù)的
    ·C#實現(xiàn)短信發(fā)送程序的例子
    ·sun最近修補了一部分java的
    ·rss定制的另外一種實現(xiàn)方式
    ·delphi實現(xiàn)利用arp欺騙來實
    ·基礎學習:基于WF的流程框
    ·網(wǎng)絡編程中怎樣得知一次數(shù)
    ·如何逆序輸出單鏈表?
    ·軟件開發(fā)過程中的性能設計
    關于我們 | 軟件開發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權所有 © 2016 新疆二域軟件開發(fā)網(wǎng) www.pg11qqq.com All Rights Reserved 新ICP備14003571號
    新疆軟件開發(fā)總機:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000