管道过滤器设计模式中的空接口用法

时间:2017-04-10 09:50:24

标签: c# design-patterns

我正在创建一个工具,它可以对输入到工具中的输入进行大量处理并生成输出。 以下是我设计工具的方法 我使用管道过滤器设计模式。
我有一个名为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。
这种方法是否正确或有更好的方法吗?

0 个答案:

没有答案