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

【设计模式】空接口

(空)接口的用法总结

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

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.lryc.cn/news/507097.html

相关文章:

  • Grad-CAM-解释CNN决策过程的可视化技术
  • 前后端学习中本周遇到的内容
  • 基于海思soc的智能产品开发(巧用mcu芯片)
  • 批量DWG文件转dxf(CAD图转dxf)——c#插件实现
  • flask flask-socketio创建一个网页聊天应用
  • 使用CNN模型训练图片识别(键盘,椅子,眼镜,水杯,鼠标)
  • Gitlab 数据备份全攻略:命令、方法与注意事项
  • Vue|scoped样式
  • eBPF试一下(TODO)
  • 【数据安全】如何保证其安全
  • [创业之路-196]:华为成功经验的总结与教训简单总结
  • 使用 NVIDIA DALI 计算视频的光流
  • 【UE5】pmx导入UE5,套动作。(防止“气球人”现象。
  • vue预览和下载 pdf、ppt、word、excel文档,文件类型为链接或者base64格式或者文件流,
  • 前端如何实现大文件上传
  • 如何评估并持续优化AI呼入机器人的使用效果
  • 找不同,找原因
  • OpenCV 学习记录:首篇
  • Java项目常见基础问题汇总
  • git 删除鉴权缓存及账号信息
  • Windows中运行Linux(WSL)
  • 一键尺寸测量仪:磁芯尺寸测量的优选方案
  • [创业之路-197]:华为的发展路径启示
  • 【计算机网络】lab2 Ethernet(链路层Ethernet frame结构细节)
  • 路径规划之启发式算法之二十:麻雀搜索算法(Sparrow Search Algorithm,SSA)
  • 音频开发中常见的知识体系
  • 【返璞归真】score检验:似然比的得分检验(Likelihood Ratio Score Test)
  • 三维重建(六)——3D Representation Methods: A Survey(北大总结三维表征--2024.10出版)
  • html基础-认识html
  • UE5 跟踪能力的简单小怪