Il modello di fabbrica C# richiede un upcast?C# factory - l'upcast è un must?
Voglio che Dio nella libreria di classi G crei un Adam nella libreria di classi A senza G dipendente da A. Dio produce Adams per il consumo di Eva nella libreria di classe E, ed è OK per Eva sapere e dipendere da Adam. (modifica - questo esempio continua a migliorare :)
La soluzione che potrei pensare è avere un AdamFactory in A. In questo modo AdamFactory conosce Adam e può facilmente crearlo (possibilmente chiamando semplicemente il costruttore di Adam). Dio riceve un AdamFactory e può ordinarlo a CreateAdam.
Ora, poiché a Dio non è consentito conoscere Adam, il CreateAdam di AdamFacotry deve restituire un oggetto, e ciò richiede ad Eve di eseguire il cast dell'oggetto restituito da AdamFactory ad un Adam.
Questo funzionerà, credo. Tuttavia, mi sento a disagio quando parlo di up-casting visto che è un no-no. È davvero un must?
P.S. - Nessuna intenzione di blasfemia, e mi scuso se i sentimenti di qualcuno sono stati feriti. Sembrava meglio usare Dio e Adamo invece di Creatore e Creato perché le ultime due parole sono troppo simili tra loro.
Modifica: suggerimento Re interfacce. Supponiamo che Adam abbia due metodi: ProvideLove, ProvideFood e ProvideProtection (stiamo mantenendo questo esempio kis-safe :). Eva usa Adam per questi due scopi, ma naturalmente Dio no. Quindi, perché fornire a Dio la consapevolezza che AdamFactor restituisce qualcosa che implementa un IAdam e non solo un oggetto? Non capisco!
Edit: Il codice di lavoro (con tutti nella stessa libreria, che il mio obiettivo è quello di separare a diverse librerie) simile a questa:
Adam God.LoadAdam(AdamID theAdamID)
var adam = new Adam(theAdamId, this)
Adam.Adam(AdamID theAdamID, God theGod)
_god = theGod
_mind = theGod.LoadMind(theAdamId, this)
Mind God.LoadMind (AdamID theAdamID, Adam theAdam)
var mind = new Mind (theAdam)
var mindId = new minId(theAdamId)
mind.DeserializeFromFile(minId)
Mind.Mind (Adam theAdam)
_adam = theAdam
Credo che tu intenda * ridurre * l'oggetto restituito a un Adam. –
Vorrei andare per le interfacce, come indicato nella prima risposta. Ad ogni modo, +1 per una bella domanda, molto divertente :-) – Shimrod
Hai svalutato la domanda per il campione prima ancora di leggerla fino alla fine. :) – Stilgar