首页 > 解决方案 > 空对象模式的空接口

问题描述

我有一些用于使用 WCF 传输数据的 DTO 对象。

public class Foo
{
    //Many fields
}

WCF 服务方法返回这个对象,我有这个对象应该为空的有效情况。

我想使用 null 对象模式返回一些东西而不是 null 以使这段代码更清晰。

因此,我将其实现为:

public interface IFoo
{
   //empty
}


public class NoFoo : IFoo
{
   //empty
}

public class Foo : IFoo
{
    public static IFoo NoFoo { get; } = new NoFoo();

    //Many fields
}

类的使用Foo不需要IFoo在空检查之外。但我觉得空界面肯定是一种代码味道。Foo但是,如果我将添加to的所有(或任何)成员IFoo,这些成员将永远不会被使用。因为接口仅用于空对象模式。所以,我不明白,在这种情况下正确的方法是什么?

标签: c#interfacenull-object-pattern

解决方案


所以我找到了更好的方法来实现我想要的。我把实现空对象模式的容器放在Foo里面。IResult

public interface IResult
{
    Foo Foo { get; }
}

public class Result : IResult
{
    public static IResult NoResult = new NoResult();

    public Foo Foo { get; private set; }

    public Result(Foo foo)
    {
       Foo = foo;
    }

    private class NoResult : IResult
    {
        public Foo Foo => throw new NotImplementedException("Null object!");
    }
}

推荐阅读