Пустой интерфейс для шаблона Null Object - PullRequest
0 голосов
/ 11 января 2019

У меня есть некоторый объект DTO для передачи данных с WCF.

public class Foo
{
    //Many fields
}

Метод службы WCF возвращает этот объект, и у меня есть случай valid , когда этот объект должен быть нулевым.

Я хочу использовать шаблон нулевого объекта, чтобы вернуть что-то вместо нуля, чтобы сделать этот код более понятным.

Итак, я реализовал это как:

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 голосов
/ 11 января 2019

Так что я найду лучший способ достичь того, чего хочу. Я поместил 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!");
    }
}
...