当前位置: 首页 > article >正文

【设计模式】空接口

(空)接口的用法总结

接口用于定义某个类的特定能力或特性。在工作流或任务管理系统中,接口可以帮助标识哪些任务可以在特定阶段执行。通过实现这些接口,任务类可以被标识为在相应的阶段可以执行,从而在验证和执行逻辑中进行类型检查。

1. 接口定义(空接口,用来做标签)

定义两个接口,分别用于标识任务。举例如下,在暂停/恢复阶段和完成阶段的可执行性。

namespace MyApp.Workflow.Commands
{
    public interface ICanRunInPauseResumePhase
    {
    }

    public interface ICanRunInCompletionPhase
    {
    }
}
2. 实现接口的任务类

创建一个任务类,实现上述接口,以表明该任务可以在相应的阶段执行

using MyApp.Workflow.Commands;

namespace MyApp.Workflow.Commands.Processing
{
    public class DataProcessingTask : Task, ICanRunInPauseResumePhase, ICanRunInCompletionPhase
    {
        public DataInput InputData { get; } = new(nameof(InputData));

        public override void Start(ITaskExecutionContext context)
        {
            // 执行数据处理逻辑
            InputData.Process(context);
        }

        public override List<Error> Validate(ITaskExecutionContext context)
        {
            List<Error> errors = new List<Error>();
            if (!InputData.IsValid())
            {
                var error = new Error(
                    ErrorSeverity.Critical,
                    context.Thread,
                    this,
                    "INVALID_INPUT_DATA",
                    InputData.Value == null ? string.Empty : InputData.Value);
                errors.Add(error);
            }
            return errors;
        }

        public override List<IInput> Inputs() =>
            new List<IInput>() { InputData };
    }
}
3. 验证任务的有效性

在验证任务的逻辑中,使用接口来检查任务是否可以在特定阶段执行。为了利用接口Interface,这里,可以用泛型 或者模板的方式,

private static bool CanTaskBeUsedInPhase<TRequiredTaskInterface>(
    Task task,
    ITaskExecutionContext context,
    List<Error> errors,
    string errorMessage,
    Task taskToAssignError)
    where TRequiredTaskInterface : class
{
    if (task is TRequiredTaskInterface)
    {
        return true;
    }
    errors.Add(new Error(
        ErrorSeverity.Critical,
        context.Thread,
        taskToAssignError,
        errorMessage));
    return false;
}
4. 在工作流中使用

在工作流的执行过程中,根据任务是否实现了这些接口来决定是否执行该任务。

if (!CanTaskBeUsedInPhase<ICanRunInCompletionPhase>(task, context, errors, "Task not allowed in this phase", taskToAssignError))
{
    continue;
}

总结

  • 接口用于标识任务在特定阶段的可执行性空接口,可以赋予属性标签
  • 通过实现接口,任务类可以被标识为在相应的工作流阶段可以执行。
  • 在验证和执行任务时,可以使用接口进行类型检查,以确保任务在适当的阶段被调用

http://www.kler.cn/a/444712.html

相关文章:

  • 基于层次化设计方法,设计一个16位二进制全加器
  • Web3.0安全开发实践:探索比特币DeFi生态中的PSBT
  • RestTemplate实时接收Chunked编码传输的HTTP Response
  • 【Vulkan入门】16-IndexBuffer
  • 单点登录平台Casdoor搭建与使用,集成gitlab同步创建删除账号
  • SparkSQL案例
  • Web3 时代:技术变革与未来展望
  • Three.js材质纹理扩散过渡
  • 力扣--LCR 53.最大数组和
  • 多模态抽取图片信息的 Prompt
  • finereport新的数据工厂插件使用场景 二 参数混合计算场景
  • HTMLCSS:超丝滑的加载动画效果
  • Linux shell脚本用于常见图片png、jpg、jpeg、tiff格式批量转webp格式后,并添加文本水印
  • 通过阿里云 Milvus 和 LangChain 快速构建 LLM 问答系统
  • ValueError: Invalid pattern: ‘**‘ can only be an entire path component
  • postman设置cookie
  • 学生信息管理系统
  • 基于 JAVA 的 SSM 网络直播带货查询系统:JSP 主导的设计与实现架构
  • 3164: 查找“支撑数”
  • 远程控制软件新趋势
  • 二、使用langchain搭建RAG:金融问答机器人--数据清洗和切片
  • (四)Spring Cloud Alibaba 2023.x:高效构建 Gateway 网关服务
  • 数据特性库 前言
  • 串口通信控制LED灯
  • 车辆重识别代码笔记12.20
  • 项目搭建+删除(单/批)