¿El patrón de fábrica de C# requiere un cambio?fábrica de C#: ¿está pendiente la actualización?
Quiero que God in class library G cree un Adam en la biblioteca A de clase sin hacer que G dependa de A. Dios produce Adams para que Eve lo consuma en la biblioteca E, y está bien que Eve sepa y dependa de Adam. (edit - esta muestra sigue mejorando :)
La solución que se me ocurre es tener una AdamFactory en A. De esta forma, AdamFactory conoce a Adam y puede crearlo fácilmente (posiblemente solo llamando al constructor de Adam). Dios recibe una AdamFactory y puede ordenarla para Create Adam.
Ahora, porque Dios no tiene permitido conocer a Adam, CreateAdam de AdamFacotry debe devolver un objeto, y esto requiere que Eve eleve el objeto devuelto por AdamFactory a un Adam.
Esto funcionará, creo. Sin embargo, me siento incómodo con el up-casting, ya que es un no-no. ¿Es esto realmente una necesidad?
P.S. - Sin Blasfemia, y me disculpo si los sentimientos de alguien fueron lastimados. Parecía mejor usar a Dios y a Adán en vez del Creador y Creado porque las dos últimas palabras son muy similares entre sí.
Editar: sugerencia de interfaces Re. Supongamos que Adam tiene dos métodos: ProvideLove, ProvideFood y ProvideProtection (mantenemos esta muestra kis-safe :). Eva usa a Adán para estos dos propósitos, pero por supuesto que Dios no. Entonces, ¿por qué darle a Dios el conocimiento de que AdamFactor devuelve algo que implementa un IAdam y no solo un objeto? ¡No lo entiendo!
Editar: El código de trabajo (con todo el mundo en la misma biblioteca, que mi objetivo es separar a las diferentes bibliotecas) se ve algo como esto:
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
Creo que quieres * derribar * el objeto devuelto a un Adam. –
Me gustaría ir a las interfaces, como se indica en la primera respuesta. De todos modos, +1 por buena pregunta, muy divertido :-) – Shimrod
Volvió a subir la pregunta de la muestra incluso antes de leerla hasta el final. :) – Stilgar