AOP 未來想像 on 2023/4/28

AOP future imagination, Aspect, weave, weaving

AOP - Waving 應用

之後

因為真實世界沒有 AOP weaving 語法,故以 Decorator patternarrow-up-right 取代。

於鷹架碼比主程式碼長的狀況下,AOP 的優勢特別明顯。

Task HandleQuery() => CatchHandling(async () =>
{
  var qryArgs = new TodoQryAgs
    {
      Msg = f_testFail ? "測試邏輯失敗" : "今天天氣真好",
      Amt = 999
    };

  dataList = await bizApi.QryDataListAsync(qryArgs);
});
Task HandleAdd() => CatchHandling(async () =>
{
  var newTodo = await bizApi.AddFormDataAsync(newTodoDesc);

  // Success
  dataList.Add(newTodo);
  newTodoDesc = string.Empty;
});

之前

以 Blazor App 為例

未導入AOP

導入AOP:CatchHandling

AOP 語法說明

語法上用符號"@"表示 waveAspect 宣示這是 AOP 的 aspect,之後接它的識別名稱,再後面的"[]"將用來接入參數。 @Target 表示 aspect 欲交織的函式或程式碼區塊,這一個 Aspect 是屬於這個物件專用的。

以 Blazor App 為例二:狀態交換

這個例子我們讓 Aspect 可以共用。我們將把 blockUI、unblockUI 解開。

未導入 AOP

導入AOP:CatchHandling

AOP 語法說明

語法上用符號"@"表示 waveAspect 宣示這是 AOP 的 aspect,之後接它的識別名稱,再後面的"[]"將用來接入參數。 @Target 表示 aspect 欲交織的函式或程式碼區塊,這一個 Aspect 是屬於這個物件專用的。 @inject 為 DI, Dependency Injection 依賴注入。 在 Aspect 起始可以注入需要的資源。 alias 是資訊交換的方式用 Call by alias 這古老的方法,在C#用 Call by reference 似乎是等效的?

更多的 AOP 想像

Last updated