zoukankan      html  css  js  c++  java
  • NCF 中如何将Function升级到FunctionRender

    简介

    历史的车轮在不断的向前推进,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.重新发布即可

    有疑问随时欢迎交流

    QQ:365845726 微信:zhao365845726 有兴趣可以加入QQ群: 群号:924439616(ML-Dotnet解决方案)
  • 相关阅读:
    LeetCode(1): 两数之和
    LeetCode(2): 两数相加
    目标检测
    图像语义分割
    Python的图像库
    Caffe
    Layers Of Caffe
    Solver Of Caffe
    ORA-01144_表空间数据文件超出最大限制
    ORA-01654_TableSpace空间不足问题处理
  • 原文地址:https://www.cnblogs.com/zhao365845726/p/15532528.html
Copyright © 2011-2022 走看看