我正在创建一个工具,它可以对输入到工具中的输入进行大量处理并生成输出。
以下是我设计工具的方法
我使用管道过滤器设计模式。
我有一个名为Engines的课程,可以完成工作
第一个Engine的输出是第二个Engine的输入。
或者第一个和第二个输出可能是第三个引擎的输入。
以下是PrincipalEngine.cs中存在的一段代码(工具的入口点,执行其他引擎):
var contentReadEngineOutput = ExecuteEngine(ContentReadEngine, EngineInput);
var contentParserEngineOutput = ExecuteEngine(ContentParserEngine, contentReadEngineOutput);
var ruleReadEngineOutput = ExecuteEngine(RuleReadEngine, null);
var ruleRunnerEngineOutput = ExecuteEngine(RuleRunnerEngine, contentParserEngineOutput, ruleReadEngineOutput);
ExecuteEngine(ResultPublishEngine, ruleRunnerEngineOutput, contentReadEngineOutput);
private IEngineEntity ExecuteEngine(ILinterEngine engine, params IEngineEntity[] engineEntities)
{
if (engineEntities != null)
engine.InitializeEngine(engineEntities);
return engine.RunEngine();
}
包括PrincipalEngine在内的所有引擎都实现了接口ILinterEngine:
public interface ILinterEngine
{
void InitializeEngine(params IEngineEntity[] engineInput);
IEngineEntity RunEngine();
}
引擎被DI注入PrincipalEngine并通过提供输入来运行以获得输出 所有引擎都具有EngineInput类型和EngineOutput类型。
例如,下面是Principal Engine的引擎输入/输出:
public interface IPrincipalEngineInput : IEngineInput
{
System.Collections.Generic.List<string> UrlList { get; set; }
}
public interface IPrincipalEngineOutput : IEngineOutput
{
List<RuleViolatingNodeWithURLModel> RuleViolatingNodeWithUrlModelList {
get; set; }
}
IEngineInput和IEngineOutput实现IEngineEntity。
public interface IEngineInput : IEngineEntity
{
}
public interface IEngineOutput : IEngineEntity
{
}
public interface IEngineEntity
{
}
现在这是我的问题:
从上面的代码可以看出,IEngineInput和IEngineOutput的基接口为IEngineEntity。
但是这个接口是空的并且已被使用,因此一个Engine的输出可以作为输入传递给'ExecuteEngine'方法中的Next Engine。
这种方法是否正确或有更好的方法吗?