我已经开始在.NET中编写我自己的WebDAV服务器类,并且我开始的第一个类是WebDAVListener
类,模仿HttpListener
类的工作方式。请求关于类设计,继承/聚合的建议
由于我不想重新实现核心http协议处理,我将使用HttpListener
所有的价值,因此我有一个问题。
什么会建议的方式来处理这个问题:
- 器里面HttpListener发现,只是改变的地方事务类类型(即的getContext + EndGetContext方法将返回不同的所有方法和属性。 WebDAV上下文类),并在内部存储和使用对象
- 构造WebDAVListener通过传递一个HttpListener类来使用?
- 用接口为HttpListener创建包装,并通过传递一个实现此接口的对象来构造WebDAVListener?
如果要传递一个HttpListener(伪装或其他方式)的WebDAVListener的路线,你会通过属性暴露出下面的听众对象,或者你会认为使用类保持到一个参考方案底层HttpListener
?
而且,在这种情况下,你会揭露一些的HttpListener
方法通过WebDAVListener
,如启动和停止,或者你会再次想到用它来保持周围的HttpListener
参考了所有这些事情的程序?
我最初的反应告诉我,我想要一个组合。首先,我希望我的WebDAVListener
类看起来像一个完整的实现,隐藏了它下面有一个HttpListener
对象的事实。另一方面,我想建立单元测试,但实际上并没有启动一个网络服务器,所以某种类型的嘲讽能力也不错,这表明我希望采用接口包装的方式。
的一种方式,我可以解决这将是这样的:
public WebDAVListener()
: WebDAVListener(new HttpListenerWrapper())
{
}
public WebDAVListener(IHttpListenerWrapper listener)
{
}
然后,我会实现HttpListener的所有方法(至少所有这些是有道理的),在我自己的类,由大多只是链接了调用底层的HttpListener对象。
您认为如何?最后的问题:如果我走的界面的方式,假设接口映射到HttpListener类1,1,并且只是为了添加对模拟的支持而写,是一个叫做包装器或适配器的接口吗?