2010-02-03 12 views
6

En determinadas por el diseño de libros de dominio, por Eric Evans, en el capítulo 6 en la sección de "fábricas" (página 139) que dice lo siguiente:DDD Book, Eric Evans: ¿Qué se entiende por "La FÁBRICA se debe abstraer al tipo deseado en lugar de la (s) clase (s) concreta (s) creada (s)"?

"Los dos requisitos básicos para cualquier buena fábrica son:

...

"2. La fábrica debe ser abstraído al tipo deseado en lugar de la clase concreta (es) creado."

Podría explicar con más detalle lo que se entiende por esa declaración sobre el número requisito básico 2.

Respuesta

8

La respuesta de Carlos Loth es correcta, pero siempre debe recordar usar un Abstract Factory también, ya que esto le permitirá acoplar fábricas de concreto a tipos de concreto sin conectar a los consumidores con fábricas o tipos de concreto.

public interface ISomethingFactory 
{ 
    ISomething Create(); 
} 

public class SomethingFactory : ISomethingFactory 
{ 
    public ISomething Create() 
    { 
     return new Something(); 
    } 
} 
10

Creo que significa que nunca debe devolver un tipo concreto de su fábrica. Por ejemplo, si tiene una interfaz, digamos ISomething, una clase anstract SomethingBase y finalmente algunas clases que implementan esta interfaz y heredan de la clase base. Su método de creación debe devolver el tipo de interfaz , intead del tipo base. Creo que esa es la idea.

public ISomething Create() { ... } 

lugar de

public SomethingBase Create() { ... } 

espero que ayude, Carlos.

+0

gracias por su rápida respuesta. Aunque todavía estoy un poco confundido porque también dice más adelante en el libro (en la parte inferior de la p.143) "La FÁBRICA está acoplada a la clase concreta de los productos"; Afortunadamente, estoy desarrollando en php, por lo que los '' tipos de devolución '' no son un problema técnico (aunque conceptualmente sigue siendo importante) –

+3

Creo que lo dice porque en la mayoría de los casos creará una instancia de la clase concreta dentro del método Create usando nuevo operador. Por lo tanto, tendrá un fuerte acoplamiento entre el método creacional y el tipo concreto. Sus consumidores no necesariamente harán referencia al tipo concreto, solo a la interfaz. Sin embargo, la clase de fábrica tendrá que hacer referencia al tipo concreto. –

+0

Creo que veo. Por lo tanto, básicamente haga uso de los diversos patrones de creación (GoF) para mantener la firma y los tipos de devolución de las clases de fábrica tan genéricos como sea posible para proteger las implementaciones específicas de hormigón. Pero aún puede tener una clase de fábrica que esté vinculada a un objeto de dominio concreto siempre que su interfaz sea genérica. Entonces, LampshadeFactory y un SofaFactory siguen siendo válidos siempre que se mantengan ocultos detrás de la interfaz abstracta de FurnitureFactory. –

Cuestiones relacionadas