程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> AOP C#在行動

AOP C#在行動

編輯:.NET實例教程
看過一本書,題目是《AscpectJ in Action》,正好這一段手上的項目搞一段落,所以有一點點空暇,決定寫一些東西。 

AOP是Aspect-Oriented Programming的簡寫。曾經為這個Aspect的中文翻譯傷透了腦筋,還有一個相似的AOP,那是Attribute-OrIEnted Programming,於是,有人譯作面向方面編程,後者則是面向特性編程。面向特性編程可以說得過去,總覺得面向方面編程翻譯的有些怪,一則中文理解不通:什麼叫面向方面?或者按台灣的習慣“方面導向”?哈,不知所雲。一個偶然的想法,ASPect又作形態解,這個形態不是我們平時所說的意識形態中的形態,那是思想中的形態,是無形的,這個形態是指對象表現出來的某種形式(它的行為、特征等)。所以,我個人認為AOP翻譯為面向形態編程似乎更為合適。 

AOP的研究逐漸成為熱門,有關AOP的描述,在CSDN文章中也有人做了比較詳細的描述,也有一些對描述的爭論。《AspectJ in Action》的描述我認為最為經典,理由是:該書是AspectJ開發者的手筆,而ASPectJ目前也是最成熟AOP的工具之一。 

對方法調用的攔截,有人把它作為對AOP的解釋,同大多數人一樣,我不這樣認為。AOP的主要作用是解決對象之間的橫向關系,一種正交的錯綜復雜的關系。傳統的OOP不能很好的或者說是很容易的解決這個問題。這就是AOP有機會得以發揚光大的原因之一。那麼AOP是如何解決這個問題呢?編織(Weave),把對象間的相關行為按照特定的規則編織到一起。而前面提到的攔截僅僅是為完成編織而采用的手段。攔截不是目的,編織才是。反過來說,編織不僅僅是攔截,它包括了多種知識和技術。這種編織的過程既可以是靜態的也可以是動態的,就像OOP中的先期綁定和後期綁定。 

本文的標題提到C#(不好意思,C#是本人最愛的語言之一),是因為AOP在C#中的研究比Java中的研究要落後好幾年。可以達到應用級的幾乎沒有(至少Java還有一個AspectJ,當前版本為1.2)。或許是我孤陋寡聞,網絡上能找到的比較知名的恐怕只有LOOM和ASPect#了,說它們還屬於試驗室的成果一點也不為過。那麼是否就是說AOP在C#的實現很難呢?回答:是,也不是。Java和C#的語言特征如此相像(它們有共同的祖先C++)。沒有理由說Java可以實現,而C#不行。那麼問題在哪裡呢?這是C#的AOP的研究,大多數人堅持的一點是不能修改已有的C#語言規范,只能對C#語言進行擴展。同時產生的程序集(Assembly)必須能夠被CLR調用和執行。另外還要考慮程序的性能。如果MS沒有在C#乃至.Net中對AOP內建的支持(如目前所做的泛型的擴展),那麼難度一定是存在的。 

幸運的是,MS並沒有完全忽略AOP,在.Net的框架類庫的設計中,我們可以隱隱約約的找到AOP的設計思想(雖然這是MS類庫實現者為解決特定的問題而采用的方法)。這也為我們在C#中實現AOP提供了設計思路。盡管如此,也還是有許多問題需要解決。 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved