Внедрение зависимостей в сравнении с вызовами методов

#c# #coding-style

#c# #стиль кодирования

Вопрос:

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

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

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

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

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

Ответ №1:

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

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

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

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