Сделайте code review. Как можно изменить архитектуру, чтобы код выглядел лучше?
Order order = service.GetOrder();
if (order.GetType().Name == "OnlineOrder")
AddOnlineOrder((OnlineOrder)order, dbConnection);
else
AddOfflineOrder((OfflineOrder)order, dbConnection);
О том, какую ахинею я нёс в ответ на этот вопрос, сейчас писать не буду.
Правильным же ответом будет паттерн Посетитель.
Лаконичный код,
который позволяет без проблем добавлять новые типы заказов
так, что ни один джуниор не забудет поддержать этот тип – код не будет компилироваться, пока наследник не реализует abstract void Accept(IVisitor visitor)
,
что в свою очередь заставит задуматься, что IVisitor должен делать с новым наследником.