1. 程式人生 > 其它 >Metalama簡介1. 不止是一個.NET跨平臺的編譯時AOP框架

Metalama簡介1. 不止是一個.NET跨平臺的編譯時AOP框架

Metalama概覽

前面一篇文章介紹到了Metalama: https://www.cnblogs.com/chsword/p/dotnet_compile_aop_base_roslyn.html

Metalama是一個基於微軟編譯器Roslyn的超程式設計的庫,可以解決我在開發中遇到的重複程式碼的問題。但是其實Metalama不止可以提供編譯時的程式碼轉換,更可以提供自定義程式碼分析與IDE結合的自定義程式碼修復與程式碼重構功能 等功能。
經過面對文件的學習,發現Metalama可以做到很多非常神奇的事情。

例如:
可以為指定類在編譯時增加介面如INotifyPropertyChanged
可以生成編譯時的類似AutoMapper

方法。
可以自定義程式碼分析,增強團隊程式碼驗證。

Metalama兩個核心概念

1. Aspect
Aspect 是AOP的基本概念,它是一個切面,可以對方法、事件、屬性、欄位、引數以及型別進行操作,這些操作包括編譯時修改這些內容或增加程式碼分析、實時模板、程式碼重構提示等。
2. Fabric
Fabric 可以對名稱空間、型別、專案進行修改,按規則新增Aspect自定義程式碼分析

Metalama的主要功能

1.編譯時程式碼轉換

如上圖中紅色示例,Metalama可以將重複的程式碼(例如日誌、快取、INotifyPropertyChanged、多執行緒、重試機制、或其它有大量重複的程式碼,如屬性、方法的定義)封裝到為一個AOP Attribute類,從而在編譯時向您的程式碼新增這個AOP類中約定的程式碼,這個AOP 的Attribute

我們以下統一稱之為Aspect

這樣做的好處是一方面可以使程式碼保持乾淨和簡潔,便於閱讀和維護,另一方便免除了執行時AOP的效能消耗。

另外對於編譯程式碼的轉換,Metalama也提供了IDE的外掛支援,具體請見下文。

2.程式碼驗證

如上圖中淺藍色示例,Metalama可以提供自定義的程式碼分析功能,這裡的程式碼分析更自由,如前面圖中示例,可以自己編寫驗證規則要求某類必須在某名稱空間中呼叫。

當然,這種程式碼驗證非常靈活,它可以基於專案、名稱空間、型別、屬性、方法、引數、返回值、欄位、事件等諸多資訊來進行自定義。

在團隊中可以使用這種自定義程式碼驗證來進行那些使用.NET自帶的分析器、FxCop、Resharper等工具無法提供的程式碼分析規則。

3.自定義設計時的程式碼修復、重構功能

如上圖深藍色示例所示,Metalama可以讓使用者按某規則,為Visual Studio提供CodeFix重構的提示,這樣對於團隊中共享某種約定是很有用的。

IDE支援

Metalama 提供了Vistual Studio外掛,當然這個外掛不是必須使用的,但是的確可以提高一定效率。
直接在VS中擴充套件 - 擴充套件管理中查詢Metalama並安裝即可。

外掛提供了可以即時檢視編譯後代碼的功能。

點選Show Metalama Diff即可檢視編譯後的程式碼。

引用

Metalama官方文件
Visual Studio 外掛