2008-12-20 61 views
8

我對Aspect Orientated Programming(Spring,PostSharp等)非常感興趣。我可以想到我會採用這種方法的幾種方法,主要是記錄或惰性負載。我希望看到其他人都用它做什麼?你使用AOP嗎?和什麼?

請列出您使用AOP解決的senarios。 (hopfully它可能激發一些別人把它撿起來太)

歡呼

骨頭

+0

dupe http://stackoverflow.com/questions/325558/aspect-oriented-programming-examples – 2008-12-20 16:10:10

回答

1

屬性在C#中可以AOP的例子 - 例如,在AuthorizeAttribute ASP.NET MVC應用授權跨屬性修飾的方法或類的需求。

2

2007/2008我在一個主要項目中使用了AOP。我工作的公司讓我開發一個定製的CMS來管理他們的客戶。它被集成到我們開發的定製框架中,並可以通過我們的規則引擎根據用戶的元數據有條件地呈現內容。

我們的環境被分爲傳統的開發/質量保證/階段/生產。我們需要一種在環境之間遷移實體的方式,無論是內容還是其他數據。我使用AOP來跟蹤對屬性值的更改,主要是記錄和版本化在下層環境中對實體所做的所有更改。使用反射,通過在目標環境中「重播」源環境中所做的更改來複制實體。我將系統稱爲ChangeFlow,因爲它已集成到工作流系統中。內容批准者可以批准當前版本,以啓動遷移。任何對象都可以通過派生一個公共基類並向需要跟蹤的方法和屬性添加一些屬性來實現「啓用ChangeFlow」。

1
  • 安全 - 申報所需的權限/角色和應用具有當前主要的知識來做出授權決定一些建議
  • 對象修剪 - 使用建議
  • 交易剪掉對象圖中的各個部分 - 應用交易行爲不具有事務性的知識,方法
  • 時刻碼

記錄經常被援引作爲一個例子,但在實踐中我發現這不是很有用。方法內部的日誌記錄往往更有價值。

如上所述,向類或方法添加屬性,然後使用AOP來內省元數據並執行邏輯,這是將該邏輯與代碼分離的好方法。您也可以在單獨的工件(XML)中創建聲明,但我發現該屬性方法非常強大。

3

我同意brd6644發佈的帖子(如果可以的話,會投票支持)。特別是他對伐木的評論。使用方面進行日誌記錄更類似於跟蹤。

在AOP上se-radio.net上有兩個podcast。 first,對Gregor Kiczales的採訪,他對AOP做了大量的研究; second,最近對Christa Schwanninger和Iris Groher的採訪側重於如何在實踐中使用AOP。兩者都值得一聽。

最後,要小心你如何採用AOP。過度關注AOP,您將專注於平臺而不是提供商業價值。我從來沒有被指示通過測試用例使用AOP。方面是我會在重構應用程序以消除重複時引入的。