Es el en CodeCampServer un patrón bien conocido StaticFactory?
Pregunta
código fuente CodeCampServer contiene un genérico StaticFactory .
Estoy conjeturando que esto es una pieza clave del mecanismo de cómo el marco juega bien con la inyección de dependencias.
Las subclases de los cuales utilizan es DefaultUnconfiguredState para proporcionar acceso a la estática, así, un estado predeterminado sin configurar por sí mismos lo que el mecanismo de resolución de dependencias puede reemplazar con la materia de trabajo.
No he podido encontrar ninguna documentación para esto ...
¿Hay una buena explicación en el libro ? (Estoy a la espera de la entrega de Amazon ...)
... o cualquier otra persona puede proporcionar un buen comentario sobre lo que es esto y si yo sería aconsejable adoptar este patrón (si se trata de una ...)?
Actualizar
Desde Jeffrey Palermo respondió a esta pregunta veo que en el manuscrito (trabajo en progreso) para MVC2 en acción este patrón / estilo se discute y se ilustra usando una fábrica que se utiliza para localizar un repositorio con el fin de mantener el capa de dominio ignorantes de las preocupaciones de persistencia. (Ver capítulo 23 ).
Por defecto, el uso de esta fábrica produce una excepción:
"el conocimiento de cómo crear el repositorio no reside con el fábrica. Esta fábrica meramente representa la capacidad para volver el repositorio "
El ejemplo podría haber utilizado uno de los varios mecanismos para inicializar una aplicación concreta de la interfaz de repositorio. En el ejemplo en el libro que eligen no utilizar un contenedor COI por motivos de simplicidad y proporcionar explícitamente en alguna lógica de puesta en marcha.
"Lo importante es que ni el proyecto básico ni el proyecto de IU debe hacer referencia a la Infraestructura proyecto o bibliotecas que son puramente infraestructural en la naturaleza. Tenemos NHibernate conservado por completo a la lado para que el resto de la la aplicación no le importa cómo los datos el acceso está sucediendo "
Un punto final a la nota sobre el código de ejemplo en este nuevo capítulo es que la fábrica ya no es estática (por lo menos no tan lejos como la interfaz hacia el exterior se refiere).
Actualización 2
El Sr. Palermo escribió en su blog un poco más sobre este estilo particular de Abstract Factory (véase la implementaion de OrderShipperFactory).
Podría también basta con considerar 'Manual de Inyección de Dependencia' (tío Bob).
Actualización 3 - Marzo el año 2016
Hay otro ejemplo de que aquí , aunque Jeffrey es explícito acerca de este código de demostración bienestar, y el comentario indica que esto se configura en lo que Mark Seeman llamaría un Composición Root (es decir, al inicio de la aplicación)
Esto lo descubrí en el artículo de Jeffrey " arquitectura de cebolla: parte 4 - Después de cuatro años "
Solución
Buena pregunta. No me gusta tampoco. En realidad debería llamarse "StartupFactoryConfiguration", pero está en la lista refactor.
Hemos jugado con esa idea como una manera de establecer DI para los lugares que no estaban bajo la inyección de constructor a través del recipiente.
Se va a desaparecer. No sé lo que es el anti-patrón (qué nombre?), Pero StaticFactory a morir.
Ahora se ha cambiado el nombre a partir de esta mañana. Ahora es AbstractFactoryBase. Es una implementación del patrón Abstract Factory: http://en.wikipedia.org/wiki/Abstract_factory_pattern
La aplicación de la fábrica es para acabar llamando a un contrainer COI, pero permite el acceso desde un lugar en el código sin una referencia de ensamblado para el conjunto de recipiente COI.
Saludos, Jeffrey Palermo
Otros consejos
Cualquier cosa estática es un enemigo de la DI.
Esta StaticFactory se parece a una implementación del Servicio de Localización de href="http://martinfowler.com/articles/injection.html#UsingAServiceLocator" rel="noreferrer"> (anti)
Considero Servicio de localización para ser un anti-patrón, ya que es totalmente opaco para el usuario de la API, que las dependencias deben estar en su lugar; por lo tanto, uno podría fácilmente invocar métodos en los objetos en un contexto en el Servicio de localización tiraría, y la API le da absolutamente ningún indicio de que este es el caso. DI apropiado tal como el uso abundante de Constructor de inyección es una alternativa mucho mejor.