简介
历史的车轮在不断的向前推进,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 ///8 /// 运行 9 /// 10 /// 11 /// 12 public override FunctionResult Run(IFunctionParameter param) 13 { 14 /* 这里是处理文字选项(单选)的一个示例 */ 15 return FunctionHelper.RunFunction (param, (typeParam, sb, result) => 16 { 17 //do something 18 result.Message = "执行成功" 19 }); 20 }
AppService里面的方法:
1 ///2 /// 运行 3 /// 4 /// 5 /// 6 [FunctionRender("更新文档", "从 GitHub 上更新最新的官方文档。官方地址:https://gitee.com/NeuCharFramework/NcfDocs", typeof(Register))] 7 public async Task Run(Docs_RunRequest request) 8 { 9 StringBuilder sb = new StringBuilder(); 10 return await this.GetResponseAsync 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, FuncunsinstallFunc) 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, FuncunsinstallFunc) 2 { 3 //指定需要删除的数据实体 4 ClearDocsAppService clearDocsAppService = serviceProvider.GetService (); 5 var docsRunRequest = new Docs_RunRequest(); 6 await clearDocsAppService.Run(docsRunRequest); 7 8 await unsinstallFunc().ConfigureAwait(false); 9 }
5.将入口文件Register中使用到Function的地方去掉
原内容:
1 public override IListFunctions => new Type[] { 2 typeof(UpdateDocs), 3 typeof(ClearDocs), 4 };
现在:
找到以上源码,直接删除即可
6.将Function及下面对应的文件删除
7.更新Xncf Module的发布版本
8.重新发布即可
有疑问随时欢迎交流