在校內論壇回一篇帖子,唧唧歪歪了這么多,呵呵。
基于屬性編程其實很簡單,原理就是給類以及類的成員附著一些東西,這些東西人稱元信息。這個名詞的出現應該也是由于計算機界好發明buzz word的結果。當然你也可以辯稱是由meta一詞引申而來,但是無所謂,我看見的就是有人因為名詞而迷惑。
這份元信息,在.net中的名字是attribute,在java中的名字叫annonation,其實是差不多的東西。具體的做法就是用[]或者@標記一下類或者類成員。[]中的是像MyAttribute(x,y)這樣的東西,其實和new MyAttribute(x,y)是一樣的。結果就是把一個instance附著到了一個類上面。因為.net和java的類是動態存在的,用術語說是能夠自省的。所以可以通過reflect得到這個類上面附著的attribute的內容和類型。
這樣帶來的好處是描述一個類或者一個類成員除了本身的接口,本身的type,本身的一些結構上的信息之外,你還能給他更多的描述。這樣的描述怎么用,就可以充分發揮想象力的了。
目前主要的一些用法是像這樣的[WithTransaction],然后事務處理就會添加上。基本上是說用屬性來“要”一些服務。但是這樣作是不好的。推薦的做法是用屬性來描述你的類或者類成員是干什么的,而不是你要什么。不過由于目前技術的發展的一些限制,這樣用attribute來表示要什么的階段還會存在很長一段時間。
最重要的是不要把基于屬性編程看作什么新東西。從前你用全局變量,然后程序根據全局變量的值來改變行為。后來你用靜態變量,后來你用配置文件,后來你用xml配置文件?,F在只不過讓你存放這種信息多了一個場所——類本身。這個就是屬性帶來的??梢哉f屬性能夠作的,其他的辦法也能作,只不過由于屬性和類是貼身的關系,帶來了其不可替代的優勢。具體說這種貼身的關系就是在xml中
<class name="..">
<myattribute>..</myattribute>
</class>
你必須額外用一些字段來關聯你定義的屬性和類。但是用了語言自身提供的屬性,這種綁定就是天然的,內省的。這個也就是屬性最大的價值和力量的源泉。
浙公網安備 33010602011771號