设计模式选择责任链与共享链接

时间:2015-12-14 14:12:49

标签: c# .net design-patterns plugins service

我正在研究一种新工具来控制系统。该软件应该能够接受来自各种来源的输入,数据库监视器,HTTP输入,其他以太网输入,谁知道将要发生什么,然后基于这些输入,发信号通知系统执行不同的功能。

到目前为止,我已经编写了一个接口IInputMonitor,它是获取输入的类的基本接口。 IInputMonitor有一个成员IRequestHandler,它负责处理源自此输入监视器的请求。这看起来像:

public interface IInputMonitor
{
    bool Start(IRequestHandler handler);

    bool Start();

    bool Stop();

    IRequestHandler RequestHandler
    {
        get;
        set;
    }
}


public interface IRequestHandler
{
    IRequestHandler NextHandler
    {
        get;
    }

    bool HandleRequest(Request request);

    bool Start();

    bool Stop();
}

大多数请求都与操作系统有关,但有些请求可以执行辅助功能,因此我最初设想实现CoR模式的IRequestHandler类。这样,基于系统的请求可以由主系统处理,并且其他功能可以被传递到为处理该特定请求而设计的类。

我的问题是,不同的输入监视器可以共享单个请求处理程序,但不能共享链中的所有处理程序链接。严格遵循CoR模式会导致类似树或长浪费的链条。

为了回避这个问题,我制作了一个特殊的IRequestHandler,其功能类似于调度程序,有点像Observer模式????

    internal class SharedRequestHandler : IRequestHandler
{

    private List<IRequestHandler> sharedHandlers;
    private HashSet<string> sharedHandlersIds;
    private List<IRequestHandler> ownedHandlers;

此类管理处理程序列表并通过它们转发请求。

我觉得这是一个混乱的模式。如果处理程序简单,则处理程序可以是单个CoR链,或者是通过其自身维护的链转发请求的SharedRequestHandler。如果这样设置,则SharedRequestHandler的子节点也可以是小链本身。混合和混合是否正常匹配这样的模式?这种系统有更好的模式吗?我希望保持灵活性,以便将来添加,但避免使系统变得如此复杂,以至于无法理解

0 个答案:

没有答案