He mirado por un buena ejemplo de un Generador de patrón de (en C#), pero no puede encontrar uno, ya sea porque no entiendo el Generador de patrón o estoy tratando de hacer algo que nunca fue su intención. Por ejemplo, si tengo un resumen de automóviles y abstracto generador de métodos para crear piezas de automóviles, yo debería ser capaz de enviar todos los 30 de una de mis opciones para el Director, tienen que construir las piezas que necesita, a continuación, construir mi automóvil. Independientemente de que el coche, camión, semi, etc. producido, yo debería ser capaz de «unidad» en exactamente la misma manera.

Primer problema es que la mayoría de los ejemplos de código de valores de la propiedad en las piezas de hormigón, que realmente creo que debería venir de una base de datos. Pensé que la idea era enviar mis opciones para el Director (a partir de un origen de datos) y tiene el generador de crear un producto personalizado, basado en mis datos.

Segundo problema es que yo quiero que el generador de métodos para crear las piezas y luego asignarlos a los productos, no pase de cadenas, pero real inflexible de las partes del producto.

Por ejemplo, quiero crear un formulario en la marcha por tener un Generador de fabricación de los campos de formulario para mí, incluyendo una etiqueta, una sección de entrada, validación, etc. De esta forma, se puede leer el objeto de mi ORM, echa un vistazo a los metadatos del objeto, pasar esto a mi Constructor y agregar el usuario recién creado control de resultado a mi formulario web.

Sin embargo, cada Constructor ejemplo me parece sólo ha codificado de datos en lugar de pasar opciones desde el código principal para el Constructor y patear a un producto personalizado. Todo parece ser un gran caso estático declaración. Por ejemplo, si tengo tres parámetros con 10 opciones de cada uno, yo no quiero construir 30 de hormigón Generador de métodos, quiero crear sólo lo suficiente para la fabricación de las propiedades de mi producto requiere, que sólo puede ser tres.

Estoy tentado a tener el Director de existir en el código principal solamente. Debería haber una forma de determinar automáticamente que el hormigón generador método para llamar similar a la del polimorfismo y el método de sobrecargas (a pesar de que es un muy mal ejemplo) en lugar de utilizar una instrucción case dentro del patrón. (Cada vez que tengo que añadir un nuevo tipo de producto, necesitará modificar el Director existente, lo cual es malo).

  • tal vez, lo que falta en el generador de patrón, es que los objetos no son destruidos al final, así que sugiero agregar este más tarde si tienes unsterstood el patrón…
  • No es realmente lo que quieres, pero la comprobación de estos artículos:<br> el patrón de descripción<br> implementación en c# de ejemplo<br / > Espero que esto ayude.

4 Comentarios

  1. 11

    Voy consulte el ejemplo de C# en el Artículo de la Wikipedia aquí.

    Primer problema es que la mayoría de los ejemplos de código de valores de la propiedad en las piezas de hormigón, que realmente creo que debería venir de una base de datos. Pensé que la idea era enviar mis opciones para el Director (a partir de un origen de datos) y tiene el generador de crear un producto personalizado, basado en mis datos.

    Que en este caso han de clase de la aplicación de PizzaBuilder que sabe cómo recuperar datos de una base de datos. Puede hacerlo de varias maneras.

    Uno sería hacer un HawaiianPizzaBuilder. Cuando la clase inicializa las consultas de la base de datos para una Pizza Hawaiana y recupera la fila. Luego, cuando los diversos Construir(x) se llama a los métodos que iba a establecer las propiedades para el campo correspondiente de la base de datos recuperado fila.

    Otro sería justo hace un PizzaDatabaseBuilder y asegúrese de que cuando se inicializa la clase que usted pasa el ID de la fila que usted necesita para ese tipo de pizza. Por ejemplo, en lugar de

    waiter.PizzaBuilder = new HawaiianPizzaBuilder();

    Utilizar

    waiter.PizzaBuilder = new PizzaDatabaseBuilder("Hawaiian");

    Segundo problema es que yo quiero que el generador de métodos para crear las piezas y luego asignarlos a los productos, no pase de cadenas, pero real inflexible de las partes del producto.

    No debería ser un problema. Lo que usted necesita es una Fábrica de/Generador de patrón de tipo para inicializar los campos de la Pizza. Por ejemplo

    lugar de

     public override void BuildDough()   { pizza.Dough   = "pan baked"; }

    puede hacer algo similar a

     public override void BuildDough()   { pizza.Dough   = new DoughBuilder("pan baked"); }

    o

     public override void BuildDough()   { pizza.Dough   = new PanBakedDoughBuilder(); }

    DoughBuilder puede ir a otra tabla en la base de datos correctamente llenar un PizzaDough Clase.

    • Buena respuesta. Si utilizamos de forma estática declarado clases de fábrica, no necesitaríamos el operador new. Tobiask constructor de la llamada es impresionante también, como jQuery. La respuesta es a la vez donde no se necesita un director es lo que estoy tomando de todo esto. El truco será el código real. Muchas gracias.
    • Cuanto más entienda esta respuesta, más te das cuenta de lo mucho RS Conley sabe. 🙂 +100 si pudiera.
  2. 21

    Sobre todo la llamada de un BuilderPattern se parece a esto:

    Car car = new CarBuilder().withDoors(4).withColor("red").withABS(true).build();
    • Que no es realmente el Generador de patrón como se describe por los Patrones de Diseño. El patrón está diseñado para crear diferentes representaciones de la misma fuente. Por ejemplo, un compilador que utiliza un analizador pero tiene diferentes backends para x86, x64, y Java de Código de Bytes.
    • Puede que no sea exactamente como se describe por los Patrones de Diseño, pero se garantiza que el objeto creado tiene todas las propiedades establecidas correctamente. También puede hacer que el objeto generador de utilizar una interfaz fluida… pero eso es para otra pregunta
  3. 14

    Nunca he pensado en ello de esta manera, pero LINQ (el patrón, no el de la sintaxis) es en realidad un generador, la derecha?

    Es una interfaz fluida que se basa una consulta y puede crear consultas en diferentes representaciones (SQL, en memoria del objeto de las consultas, webservice consultas, Bart de Smet incluso escribió una implementación de Linq-to-Excel).

    • Sí, absolutamente.
  4. 0

    Yo diría que no se puede evitar cualquiera de estos – de tener pocos sobrecargas para las piezas y tener un caso/si la instrucción en algún lugar abajo de la pila. También tener que modificar el código cuando se añade una nueva clase podría ser su única opción.

    Que se dijo que usted puede obtener ayuda con algunos otros patrones – es decir, de la Fábrica, que podría ayudar en el proceso de construcción. También uso sensato de polimorfismo (por ejemplo, todas las piezas de heredar de algún tipo de ser es la clase o interfaz) puede reducir la cantidad de ifs/casos y sobrecargas.

    Espero que esto ayude.

Dejar respuesta

Please enter your comment!
Please enter your name here