Как обощённые классы использовать в коллекции?

У класса есть такие зависимости.

private readonly IDataReceiver<A> _receiverA;
private readonly IDataReceiver<B> _receiverB;

Разные типы / разные базы данных

Хотелось бы их поместить в коллекцию, чтобы конструктор класса был с меньшим количеством параметров, но в таком случае что то совсем страшное выходит что вообще непонятно становится что классу нужно) типа такого:

private readonly Dictionary<Type, object> _receivers;

А использование:

var receiverA = new MockReceiver<A>();
var receiverB = new MockReceiver<B>();

var receivers = new Dictionary<Type, object>
{
    { typeof(A), receiverA },
    { typeof(B), receiverB }
};

Пробовал по разному, но всё равно всё вокруг objeсt получалось, какой может быть граммотный подход ?


Ответы (1 шт):

Автор решения: Aziz Umarov

Грамотный подход он всегда относительный. Потому что грамота в различный языках различна. Тема холиварная.

Много параметров в конструкторе говорит о том что у вас возможное нарушение SPR (single responsibility principle) и ваш "GOD class" делает чуть больше чем много Но есть паттерны и я предполагаю что для вашего примера подойдёт паттерн Facade. Прошу заменить что возможно нарушение принципа и возможно подойдёт паттерн Facade.

Существует также и другие возможности регистрации объектов в контейнере когда на выходе возможно получить IEnumerable<IDataReceiver> и просматривать коллекцию ресиверов. Но тут как говорится вкусовщина

→ Ссылка