Я всегда придерживался мнения, что большие операторы switch являются признаком плохого дизайна ООП. В прошлом я читал статьи, в которых обсуждается эта тема, и они предлагали альтернативные ООП-подходы, обычно основанные на полиморфизме для создания экземпляра нужного объекта для обработки кейса.
Сейчас я нахожусь в ситуации, в которой есть чудовищный оператор переключения, основанный на потоке данных из сокета TCP, в котором протокол состоит в основном из завершающей команды перевода строки, за которой следуют строки данных, за которыми следует маркер конца. Команда может быть одной из 100 различных команд, поэтому я хотел бы найти способ уменьшить этот оператор переключения монстров до чего-то более управляемого.
Я немного погуглил, чтобы найти решения, которые я помню, но, к сожалению, в наши дни Google превратился в пустошь с нерелевантными результатами для многих типов запросов.
Есть ли какие-либо шаблоны для такого рода проблем? Любые предложения о возможных реализациях?
Одна мысль, которую я имел, состояла в том, чтобы использовать поиск по словарю, сопоставляя текст команды с типом объекта для создания экземпляра. Это имеет приятное преимущество, заключающееся в простом создании нового объекта и вставке новой команды / типа в таблицу для любых новых команд.
Однако это также имеет проблему взрыва типа. Теперь мне нужно 100 новых классов, плюс я должен найти способ аккуратно связать их с моделью данных. Является ли «один истинный оператор переключения» действительно правильным выбором?
Буду признателен за ваши мысли, мнения или комментарии.