我正在研究一种新工具来控制系统。该软件应该能够接受来自各种来源的输入,数据库监视器,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的子节点也可以是小链本身。混合和混合是否正常匹配这样的模式?这种系统有更好的模式吗?我希望保持灵活性,以便将来添加,但避免使系统变得如此复杂,以至于无法理解