基於屬性編程

來源:互聯網
上載者:User

在校內論壇回一篇文章,唧唧歪歪了這麼多,呵呵。

基於屬性編程其實很簡單,原理就是給類以及類的成員附著一些東西,這些東西人稱元資訊。這個名詞的出現應該也是由於電腦界好發明buzz word的結果。當然你也可以辯稱是由meta一詞引申而來,但是無所謂,我看見的就是有人因為名詞而迷惑。

這份元資訊,在.net中的名字是attribute,在java中的名字叫annonation,其實是差不多的東西。具體的做法就是用[]或者@標記一下類或者類成員。[]中的是像MyAttribute(x,y)這樣的東西,其實和new MyAttribute(x,y)是一樣的。結果就是把一個instance附著到了一個類上面。因為.net和java的類是動態存在的,用術語說是能夠自省的。所以可以通過reflect得到這個類上面附著的attribute的內容和類型。

這樣帶來的好處是描述一個類或者一個類成員除了本身的介面,本身的type,本身的一些結構上的資訊之外,你還能給他更多的描述。這樣的描述怎麼用,就可以充分發揮想象力的了。

目前主要的一些用法是像這樣的[WithTransaction],然後交易處理就會添加上。基本上是說用屬性來“要”一些服務。但是這樣作是不好的。推薦的做法是用屬性來描述你的類或者類成員是幹什麼的,而不是你要什麼。不過由於目前技術的發展的一些限制,這樣用attribute來表示要什麼的階段還會存在很長一段時間。

最重要的是不要把基於屬性編程看作什麼新東西。從前你用全域變數,然後程式根據全域變數的值來改變行為。後來你用靜態變數,後來你用設定檔,後來你用xml設定檔。現在只不過讓你存放這種資訊多了一個場所——類本身。這個就是屬性帶來的。可以說屬效能夠作的,其他的辦法也能作,只不過由於屬性和類是貼身的關係,帶來了其不可替代的優勢。具體說這種貼身的關係就是在xml中

<class name="..">
<myattribute>..</myattribute>
</class>

你必須額外用一些欄位來關聯你定義的屬性和類。但是用了語言自身提供的屬性,這種綁定就是天然的,內省的。這個也就是屬性最大的價值和力量的源泉。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.