Nella mia azienda, disponiamo di molti "servizi" diversi che funzionano in parallelo e inviano messaggi tra loro utilizzando un sistema di messaggistica comune. Tutti gli oggetti messaggio provengono da un oggetto generico comune che abbiamo definito per la messaggistica. Quando un servizio riceve un messaggio, la prima cosa che deve fare è ritrasmettere l'oggetto al tipo derivato in modo che possa estrarre i dati necessari.
Ho letto su Internet che non dovresti downcast un puntatore a oggetti di base su un puntatore a oggetti derivati e che doverlo fare è spesso un segno di cattiva progettazione. Sono d'accordo con questo sentimento per la maggior parte dei casi. E posso immaginare diversi progetti per l'oggetto messaggio generico che non richiederebbero down-casting. Ma non vedo alcuna grande ragione per gestire questa situazione in modo diverso.
Quindi la mia domanda complessiva è: il down-casting è sempre una brutta cosa? Ci sono situazioni in cui il down-casting è necessario o accettabile?