Внедрение зависимостей по сравнению с вызовами методов - PullRequest
0 голосов
/ 04 ноября 2011

В моем проекте я реализовал UdpListener.Он предназначен для получения пакетов udp для нескольких IP-адресов (групп многоадресной рассылки) на конкретном порту.

Мне интересно, нужно ли внедрять объект (сбор событий с multicastGroupIPs) с помощью конструктора (public UdpListener(int port, EventList<IPAddress> multicastGroups))или предоставьте два метода в интерфейсе для JoinMulticastGroup и RemoveMulticastGroup.

Я не уверен, какой путь чище, поэтому мне интересно ваше мнение.

Редактировать:

Я хочу использовать Unity DI.Таким образом, port предоставляется файлом конфигурации, а объект multicastGroupIPs - кодом.

1 Ответ

3 голосов
/ 04 ноября 2011

Иногда дело вкуса использовать инъекцию конструктора или метода / вызова метода.

В этом случае вы должны рассмотреть, является ли коллекция многоадресной группы изменчивой. Если вы уверены, что он никогда не изменится, вы можете передать его конструктору. Наличие неизменного состояния - это всегда хорошая практика.

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

Так что, если коллекция неизменна, передайте ее конструктору. Но если это является общим для всех слушателей, реализующих интерфейс, выбирайте вызовы методов, так как вы никогда не можете быть уверены.

...