空对象模式的空接口

时间:2019-01-11 09:32:44

标签: c# interface null-object-pattern

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

public class Foo
{
    //Many fields
}

WCF服务方法返回此对象,当此对象为null时,我会遇到 valid 情况。

我想使用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的所有(或任何)成员添加到IFoo,这些成员将永远不会被使用。因为接口仅用于空对象模式。 所以,我不明白,在这种情况下正确的方法是什么?

1 个答案:

答案 0 :(得分:0)

所以我找到了实现我想要的更好的方法。我将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!");
    }
}