我知道VB.NET有很多面向方面的框架。爲了將一個方面添加到一些方法中,將整個框架發揮作用有點重要。 VB.NET是否提供了一種簡單的方式(通過某種元編程/反射),以在一個類/對象的現有方法中對某個方面進行分層?有沒有簡單的方法來添加一個方面到現有的VB.NET方法?
基本上,目標是攔截方法的傳入消息來調用它並添加副作用或操作請求,就像通常在標準AOP中執行的一樣。
是否有計劃將方面直接整合到語言中?
我知道VB.NET有很多面向方面的框架。爲了將一個方面添加到一些方法中,將整個框架發揮作用有點重要。 VB.NET是否提供了一種簡單的方式(通過某種元編程/反射),以在一個類/對象的現有方法中對某個方面進行分層?有沒有簡單的方法來添加一個方面到現有的VB.NET方法?
基本上,目標是攔截方法的傳入消息來調用它並添加副作用或操作請求,就像通常在標準AOP中執行的一樣。
是否有計劃將方面直接整合到語言中?
在這種情況下,多態性不是一個選項嗎?我想你會發現,除了某種AOP框架之外,VB無法改變現有類的功能。您可以繼承並重寫基本成員,也可以使用擴展方法向現有類添加其他功能,但無法更改現有類中的現有功能。
可以創建一個模仿另一個現有庫的新庫,並欺騙現有代碼,使其認爲您的新庫是原始庫,但除非絕對必要,否則這是一個壞主意。機會只需要用標準的OOP方式重新考慮你的設計,而不是用AOP術語來思考。
裝飾者(或代理)模式如何?由於它只是一些方法,所以你只需要一個或兩個裝飾器類。如果您後來發現它不只是一種或兩種方法,那麼您可以考慮引入AOP工具。
這是一個example in C#,應該很容易轉換爲VB.NET
我在我們商店的代碼庫的幾個地方使用裝飾模式,它非常方便。當數百行代碼引用一種類型時,你不敢重寫每一個使用裝飾器類型的引用,麻煩就來了。你想悄悄地添加一個裝飾,以便當前的代碼不會抱怨(甚至沒有意識到它發生了)。 – Mario 2012-08-20 17:01:27
謝謝。我有時會發現自己正在尋找在VB.NET中做的事情,而在Ruby這樣的動態語言中很容易實現。 – Mario 2012-07-10 12:08:31