Quando vuoi inviare i tuoi tipi su WCF, devi aggiungere un sacco di [ServiceKnownType(typeof(MyFirstConcreteType))]
alla definizione dell'interfaccia del tuo contratto.
Non è possibile utilizzare [ServiceKnownType(typeof(IMyInterface))]
, anche se questo verrà compilato e quindi fallito in fase di runtime.
Anche quando definisci MyExtendedFirstConcreteType : MyFirstConcreteType
, devi aggiungere un extra [ServiceKnownType(typeof(MyExtendedFirstConcreteType))]
.
Questa è una chiara violazione del Principio di sostituzione di Liskov, perché non è possibile utilizzare un tipo derivato in cui è possibile utilizzare il tipo di base.
Perché WCF è stato progettato con questo difetto? Sono disponibili soluzioni efficaci?
Sebbene tali domande siano irrilevanti per le scimmie di codice, un architetto di software dovrebbe comprendere le tecnologie che sceglie, conoscere i loro vantaggi e svantaggi e applicare tale conoscenza al progetto. Un caposquadra potrebbe utilizzare questo input dall'architetto per scoprire se ci sono abbastanza membri del team con una sufficiente conoscenza di tali tecnologie e forse stimare i costi di formazione e introduzione rispetto a una tecnologia con cui il team è esperto. nel reparto Qualità potrebbe essere sconvolto sentire che potrebbe apparire un errore di runtime che difficilmente può essere prevenuto con metodi di test automatici: l'architetto potrebbe aver bisogno di una buona ragione per accettarlo. Ecc.