簡介
歷史的車輪在不斷的向前推進,NCF也在不斷的迭代更新,只為成為更好的NCF
如果你之前沒有用過NCF可以跳過這個文件,直接去下載最新的NCF原始碼進行實踐。
NCF倉庫地址:https://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),又叫防腐層,參考文獻:https://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 上更新最新的官方文件。官方地址:https://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 上更新最新的官方文件。官方地址:https://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.重新發布即可
有疑問隨時歡迎交流