Как избавится от сравнения класов

Динамическое связывание
на самом деле это должно выглядеть как-то так.

Преимущество, в любое время можем поменять интерфейсы.
Порождение таблицы как правило выносят в фабрику
@kozinove в конечном счете опять осталось приведение типов :( получается, что если запрос не того типа, который нужен методу, то он работает некорректно, когда не тот запрос. Сразу будет вопрос, почему бы не ограничить множество передаваемых типов запросов.