我有一些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
,这些成员将永远不会被使用。因为接口仅用于空对象模式。
所以,我不明白,在这种情况下正确的方法是什么?
答案 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!");
}
}