空的抽象类/接口标志的糟糕设计?

时间:2014-01-16 09:52:00

标签: c# .net inheritance architecture

我有以下类结构:

enter image description here

事实上,每个请求都不会共享任何内容,就像我处理typeof / cast请求时一样。拥有空根类的原因是在编译时限制您可以传递给处理请求的方法的类:

void ProcessRequest(Request request)

这种设计是否存在缺陷?我有一个空的根类/接口让我觉得很奇怪。

3 个答案:

答案 0 :(得分:2)

在澄清评论的帮助下,我会做这样的事情。在这种情况下,我不认为需要一个空类。有时候你会这样做“OO-way”使用inheretance是简单的方法重载应该完成你需要的东西。在我的示例中,泛型可能实际上是落空的,如果你只是/或类型的话,你可以将void Process(Request request)分成几个方法。

public class RequestA
{
}

public class RequestB
{
}

public class RequestC
{
}

public class RequestProcesser :
    IProcessRequest<RequestA>,
    IProcessRequest<RequestB>,
    IProcessRequest<RequestC>
{
    public void Process<RequestA>(RequestA request)
    {
    }

    public void Process<RequestB>(RequestB request)
    {
    }

    public void Process<RequestC>(RequestC request)
    {
    }
}

public interface IProcessRequest<TRequest>
{
    void Process<TRequest>(TRequest request);
}

答案 1 :(得分:1)

查看维基百科上的“Marker interface pattern”,其中介绍了一些优点和内容。这种方法的缺点。

答案 2 :(得分:1)

这称为标记界面。

理想情况下,您将删除运行时强制转换并执行基于自然继承的解决方案。我认为这是不可能的,否则你就不会问。

鉴于此,使用标记界面比仅仅输入object更好一点,因为它不太容易出现人为错误。它更自我记录,这是好的。