NCF 中如何將Function升級到FunctionRender

簡介

歷史的車輪在不斷的向前推進,NCF也在不斷的迭代更新,只為成為更好的NCF

如果你之前沒有用過NCF可以跳過這個文檔,直接去下載最新的NCF源碼進行實踐。

NCF倉庫地址://github.com/NeuCharFramework/NCF

如果你之前已經用過NCF,那麼一定了解Xncf Module是啥了,那麼就需要用到今天要說的內容了

在開始說之前呢,先來回顧一下,這個功能主要用在什麼地方的

下圖就是

 這些功能原本是放在Xncf的Function裡面的

更新到最新版以後,就沒有Function了,更加深層次的DDD化了,所以採用了FunctionRender的方式

步驟

1.先建立對應的文件夾及文件

2.將原來Function裡面的方法放入到AppService中

3.建立對應的參數的內容

4.將原來需要調用和觸發方法的地方修改

5.將入口文件Register中使用到Function的地方去掉

6.將Function及下面對應的文件刪除

7.更新Xncf Module的發布版本

8.重新發布

實施

1.先建立對應的文件夾及文件

建立ACL -> Port

> 概念ACL (Anti Corruption Layer),又叫防腐層,參考文獻://blog.csdn.net/muzizongheng/article/details/108871808

建立OHS -> Local -> AppService

> 概念OHS (Open Host Service) , 又叫開放主機服務,主要是定義一種協議,讓你的子系統通過該協議來訪問你的服務。你需要將該協議公開,這樣任何與你集成的應用都可以使用該協議

建立OHS -> PL

> 概念PL(Published Language),又叫發布語言,和開放主機服務一起,例如json,xml或者自定義文檔返回格式等

建立Domain -> Models

> 概念Domain,又叫領域,領域下可以建立自己的領域模型

2.將原來Function裡面的方法放入到AppService中

原方法:

 1 //注意:Name 必須在單個 Xncf 模組中唯一!
 2 public override string Name => "更新文檔";
 3 
 4 public override string Description => "從 GitHub 上更新最新的官方文檔。官方地址://gitee.com/NeuCharFramework/NcfDocs";
 5 public override Type FunctionParameterType => typeof(UpdateDocs_Parameters);
 6 
 7 /// <summary>
 8 /// 運行
 9 /// </summary>
10 /// <param name="param"></param>
11 /// <returns></returns>
12 public override FunctionResult Run(IFunctionParameter param)
13 {
14     /* 這裡是處理文字選項(單選)的一個示例 */
15     return FunctionHelper.RunFunction<UpdateDocs_Parameters>(param, (typeParam, sb, result) =>
16         {
17             //do something
18             result.Message = "執行成功"
19         });
20 }

AppService裡面的方法:

 1 /// <summary>
 2 /// 運行
 3 /// </summary>
 4 /// <param name="param"></param>
 5 /// <returns></returns>
 6 [FunctionRender("更新文檔", "從 GitHub 上更新最新的官方文檔。官方地址://gitee.com/NeuCharFramework/NcfDocs", typeof(Register))]
 7 public async Task<StringAppResponse> Run(Docs_RunRequest request)
 8 {
 9     StringBuilder sb = new StringBuilder();
10     return await this.GetResponseAsync<StringAppResponse, string>(async (response, logger) =>
11     {
12         //do something
13 
14         response.Data = "執行成功"
15 
16         logger.Append(response.Data);
17         return null;
18     }, saveLogAfterFinished: true);
19 }

3.建立對應的參數的內容

在PL中建立你需要的參數

 1 using Senparc.Ncf.XncfBase.FunctionRenders;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Text;
 5 
 6 namespace ML.Xncf.Docs.OHS.PL
 7 {
 8     public class Docs_RunRequest : FunctionAppRequestBase
 9     {
10     }
11 }

4.將原來需要調用和觸發方法的地方修改

原註冊文件中卸載的方法

1 public override async Task UninstallAsync(IServiceProvider serviceProvider, Func<Task> unsinstallFunc)
2 {
3     //指定需要刪除的數據實體
4     ClearDocs clearDocs = new ClearDocs(serviceProvider);
5     _ = clearDocs.Run(null);
6 
7     await unsinstallFunc().ConfigureAwait(false);
8 }

現註冊文件中卸載的方法

1 public override async Task UninstallAsync(IServiceProvider serviceProvider, Func<Task> unsinstallFunc)
2 {
3     //指定需要刪除的數據實體
4     ClearDocsAppService clearDocsAppService = serviceProvider.GetService<ClearDocsAppService>();
5     var docsRunRequest = new Docs_RunRequest();
6     await clearDocsAppService.Run(docsRunRequest);
7 
8     await unsinstallFunc().ConfigureAwait(false);
9 }

5.將入口文件Register中使用到Function的地方去掉

原內容:

1 public override IList<Type> Functions => new Type[] { 
2     typeof(UpdateDocs),
3     typeof(ClearDocs),
4 };

現在:

找到以上源碼,直接刪除即可

6.將Function及下面對應的文件刪除

7.更新Xncf Module的發布版本

8.重新發布即可

有疑問隨時歡迎交流