Пустой интерфейс для шаблона Null Object
У меня есть некоторый объект DTO для передачи данных с WCF.
public class Foo
{
//Many fields
}
Метод службы WCF возвращает этот объект, и у меня есть допустимый случай, когда этот объект должен быть нулевым.
Я хочу использовать шаблон нулевого объекта для возврата чего-то вместо нулевого, чтобы сделать этот код более понятным.
Итак, я реализовал это как:
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 ответ
Так что я найду лучший способ добиться того, чего хочу. я кладу 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!");
}
}