Estoy intentando mejorar mi estilo de codificación. Tenga en cuenta la situación siguiente:
Supongamos que quiero definir un control de servidor de Álbum ASP.Net personalizado. El objetivo es permitir que el usuario elija el tipo de álbum y todo lo demás se llevará a cabo por el control.
He pensado en 2 enfoques:Mejor patrón de diseño para el siguiente escenario
1- Defina una interfaz IAlbum y defina una clase (que implementa IAlbum) para cada tipo de Álbum. Por ejemplo:
public class FlashAlbum : IAlbum
{
// Implement IAlbum Methods...
// FlashAlbum-Specific Properties/Methods.
}
public class JSAlbum : IAlbum
{
// Implement IAlbum Methods...
// JSAlbum-Specific Properties/Methods.
}
Por lo tanto, si el usuario desea un álbum flash, debe crear explícitamente un objeto FlashAlbum. algo como:
var myFlashAlbum = new FlashAlbum(/*FlashAlbumParameters*/);
var myJSAlbum = new JSAlbum(/*JSAlbumParameters*/);
El problema es que no quiero que el usuario tenga que ocuparse de varios tipos de álbumes. Lea a continuación para entender a qué me refiero.
2- Definir iAlbum, definir una clase (que implementa iAlbum) para cada tipo Album (igual que anteriormente) y definen Album
clase que no implemento iAlbum. Se usa para crear instancias de álbum en su contructor (patrón de fábrica). Definir EnumAlbumTypes:
Public Enum AlbumTypes
{
FlashAlbum,
JSAlbum
}
Ahora definir un constructor de la clase padre del álbum que toma el parámetro de tipo EnumAlbumTypes y crea el álbum correspondiente en función del parámetro. Yo prefiero este método Pero no estoy muy familiarizado con el patrón de fábrica. Quiero que el usuario cree álbumes como:
var myFlashAlbum = new Album(AlbumTypes.FlashAlbum);
// Now set FlashAlbum custom properties.
var myJSAlbum = new Album(AlbumTypes.JSAlbum);
// Now set JSAlbum custom properties.
¿Cuál es el mejor enfoque para lograrlo?
Gracias y lo siento por la larga publicación.
Parece que responde su propia pregunta. El patrón de fábrica parece responder mejor a su expectativa de que el usuario no tenga que tratar con múltiples tipos de álbumes al encapsular la creación de un tipo específico. ¿Qué preocupaciones tienes sobre la implementación de este patrón? –
Como puede ver en mi código, estaba llamando incorrectamente a la clase de fábrica principal. 'nuevo álbum (AlbumType.FlashAlbum)' es correcto. Debería llamarlo así: 'AlbumFactory.Create (AlbumType.FlashAlbum)'. PD Como soy nuevo en el uso de patrones de diseño, quería asegurarme de estar en el camino correcto. – Kamyar