Пустой интерфейс для шаблона 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!");
    }
}
Другие вопросы по тегам