2008-10-13 67 views
12

在Delphi中可以使用面向方面的編程嗎?我會對本地支持以及第三方解決方案感興趣。Delphi中的AOP支持

我沒有我想用AOP來解決特定的問題,但我在學習AOP簡單地感興趣。

回答

4

Delphi的後續版本中的ClassHelpers允許一些非常有限的AOP類型行爲。您可以使用ClassHelpers將行爲注入其他類,而不會從其中降級。它允許覆蓋現有的方法,然後可以選擇調用現有的方法。

的限制是你必須聲明ClassHelper特定類和它的後代。另外一個類只能有一個ClassHelper。

這些與C#中的擴展方法類似。

12

AOP取決於兩點:

  • 注入額外的代碼到代碼
  • 現有單元的一個裝置,放置在其中的代碼應注射條件的能力。

這通常被稱爲代碼編織。它是程序轉換的更大的研究範圍內的專業化。

JIT編譯的語言都有,因爲更多的信息保留在字節碼/ IL實現代碼織不是靜態編譯的程序更多的選擇。它們還支持反射,它提供了在運行時操作代碼的能力。

Delphi.NET和Prism對任何其他.NET語言都具有相同的訪問權限。

我知道有兩個用於Delphi Win32的AOP框架。第一個是MeAOP,這已經被提及。第二個是Infra。這兩個項目都採用了與AOP類似的方法。他們使用RTTI和巧妙的指針操作的組合來攔截方法調用,以便在方法調用之前或之後運行其他代碼。您將橫切功能定義爲框架AOP類的子類。您通過將方法名稱作爲字符串參數傳遞給AOP框架來註冊要攔截的方法。

這兩個框架仍然是積極開發的,實際上比AOP更大。不幸的是文檔是有點稀疏(在紅外線的情況下,主要是在葡萄牙)

另一個項目試圖通過AOP源代碼,在2004年取得了一些成功編織回來。基本上,他們在一個名爲DMS的通用程序轉換工具之上構建了一個方面編織器,並在編譯之前使用它將代碼注入到delphi源文件中。他們面向方面的語言主要受AspectJ的影響。

http://www.gray-area.org/Research/GenAWeave/有鏈接到原始文件和演示以及改造過程中的一些影片。

也可以使用運行時代碼工具來完成此操作。它是一些分析器使用的技術,可以將計數器和堆棧軌跡注入到運行代碼中,而無需修改原始源代碼。可以使用類似的技術將橫切關注注入到靜態編譯的可執行文件中。 PinTool項目就是一個很好的例子。

+0

對於Delphi prism,現在有了開箱即用的AOP支持:http://prismwiki.codegear.com/en/Cirrus – Miel 2010-09-07 15:16:33

相關問題