Применение внедрения зависимостей для сторонних компонентов библиотеки - PullRequest
0 голосов
/ 04 мая 2020

В моем проекте я реализую пакет Common.Network, который обеспечивает комплексную реализацию сетевого сервера. Реализация основана на библиотеке NetMQ. Вот небольшое изображение, которое показывает зависимости между моим пакетом и библиотекой:

enter image description here

Как вы можете видеть, серверный класс использует много экземпляров классы из библиотеки NetMQ.

Поэтому мне интересно, стоит ли мне полностью применять здесь внедрение зависимости?

Если я это сделаю, конструктор сервера будет выглядеть так (+):

public Server(
  ServerSettings settings, 
  IContext context, 
  NetMQ.Sockets.PairSocket mainThreadSocket, 
  NetMQ.Sockets.PairSocket serverThreadSocket,
  NetMQ.Sockets.PublisherSocket dataSocket,
  NetMQ.Sockets.RouterSocket inputSocket
) 
{ 
  //... 
}

(+) Если я сделаю это, я в конечном итоге представлю классы-обертки для исходных сокетов NetMQ, в которых есть интерфейсы, позволяющие избежать ссылки на исходные классы непосредственно здесь. Но сейчас это другая история.

Преимущество этого состоит в том, что я могу использовать mocks вместо реальных сокетов для проверки моего Server класса. А позже я мог бы использовать адаптер для сокетов, чтобы изменить поведение при необходимости. Я действительно за это решение.

Однако недостатком было бы то, что создание экземпляра Server было бы настоящей болью: пользователь класса Server должен обработать создание экземпляра множество различных объектов сокетов и, кроме того, пользователь также должен позаботиться об очистке этих ресурсов. Хотя, если бы я инкапсулировал все эти вещи внутри сервера (создавая и удаляя экземпляры сокетов внутри класса Server), пользователю моего класса даже не нужно знать, что означает NetMQ и как он работает.

Что вы думаете об этом?

...