Posted on 2005-11-14 15:37
canonical 閱讀(329)
評論(0) 編輯 收藏 所屬分類:
軟件開發
AOP(Aspect Oriented Programming)與DSL(Domain Specific Language)其實并不是相互沖突的概念。但在AOP社區流傳過一種說法,認為AOP的出現使得DSL成為不必要的技術,也反對制造基于不同領域知識的特殊的DSL方言。從某種程度上說,這種說法有一定的道理。DSL的核心觀念是在比較高的抽象層次上來描述問題并處理問題。除了抽象領域概念之外, DSL最關鍵的就是抽象出問題領域中的結構,并對他們進行有效的描述和控制。但是DSL本身并沒有提供什么一致的方法來規范這種抽象的結果,因而最終對于同一問題我們可能得到很多種DSL解決方案。另外發明一種語言往往意味著連帶提出一整套環境假設和規則約定,一般很難針對特殊情況進行局部修正,一旦初始設計出現問題,往往很難修正。結果,設計DSL目前還只能是少數人的專利。
與DSL相比,AOP是個相對簡單的概念。抽象的說,它實現系統的一種行為切片(behavior slice),可以看作是修飾語與動作之間的正交分解。而從基本的結構含義上說,AOP的目標沒有DSL那么大,它解決的是程序中最簡單的一個結構問題:定位到一段語句,在其前方和后方分別插入一段代碼,并對其進行維護。AOP是對OOP(Object Oriented)最直接的也是最重要的一種補充,雖然它比DSL的概念要簡單許多,但在具體的操作方法上也要明確許多。我們程序中最常見的結構問題都可以在AOP的框架下得到解決,因而大大削弱了在這些方面對于DSL的需求。
但是AOP的有效性并不意味著它將取代DSL,事實上AOP關注的重點仍然是程序領域,它所解決是線性結構(程序代碼)的交織問題,而DSL所關注的是結構更加復雜豐富的業務領域。隨著應用的深入,DSL將大有所為。