Может ли сеттер для делегата быть в интерфейсе? - PullRequest
0 голосов
/ 21 мая 2009

У нас много объектов с таким дизайном: интерфейс и несколько реализаций, а также использование нескольких объектов по составу. Пример: Foo реализует IFoo и имеет объект Bar, который реализует IBar У Foo также есть метод setBar (IBar bar) для введения зависимости.

Мой вопрос: сеттер не может быть в интерфейсе? (Для тестирования, издевательства ... я застрял!)

Ответы [ 3 ]

1 голос
/ 21 мая 2009

Иметь сеттер в интерфейсе только для насмешек и тестирования нехорошо. Таким образом, вы разрешаете пользователям этого интерфейса произвольно заданные компоненты, даже если свойства этого объекта, вероятно, не должны изменяться после создания. Интерфейс не должен показывать, как построить объект.

0 голосов
/ 21 мая 2009

Либо впрыскивать Bar в Foo, используя setter Injection. В контексте, где Foo не может существовать без Bar, было бы более уместно ввести Bar с помощью конструктора.

Подробнее: Типы внедрения зависимостей

0 голосов
/ 21 мая 2009

Если вы используете полиморфизм, то есть вызываете сеттер для типа интерфейса, то, очевидно, он вам нужен в интерфейсе.

...