Я пытаюсь улучшить свой стиль кодирования.Рассмотрим следующий сценарий:
Предположим, я хочу определить пользовательский серверный элемент управления ASP.Net Album.Цель состоит в том, чтобы позволить пользователю выбрать тип альбома, и все остальные вещи будут выполняться элементом управления.
Я подумал о 2 подходах:
1- Определить интерфейс IAlbum и определить класс (который реализует IAlbum) для каждого типа альбома.Например:
public class FlashAlbum : IAlbum
{
// Implement IAlbum Methods...
// FlashAlbum-Specific Properties/Methods.
}
public class JSAlbum : IAlbum
{
// Implement IAlbum Methods...
// JSAlbum-Specific Properties/Methods.
}
Так что, если пользователь хочет альбом Flash, он должен явно создать объект FlashAlbum.что-то вроде:
var myFlashAlbum = new FlashAlbum(/*FlashAlbumParameters*/);
var myJSAlbum = new JSAlbum(/*JSAlbumParameters*/);
Проблема в том, что я не хочу, чтобы пользователь имел дело с несколькими типами альбомов.Читайте ниже, чтобы понять, что я имею в виду.
2 - Определите IAlbum, определите класс (который реализует IAlbum) для каждого типа альбома (как и выше) и определите Album
класс, который не реализовать IAlbum.Он используется для создания экземпляров альбома в его конструкторе (фабричный шаблон).Определите EnumAlbumTypes:
Public Enum AlbumTypes
{
FlashAlbum,
JSAlbum
}
Теперь определите конструктор для родительского класса Album, который принимает параметр типа EnumAlbumTypes и создает соответствующий альбом на основе этого параметра.Я предпочитаю этот метод.Но я не очень знаком с заводским рисунком.Я хочу, чтобы пользователь создавал такие альбомы, как:
var myFlashAlbum = new Album(AlbumTypes.FlashAlbum);
// Now set FlashAlbum custom properties.
var myJSAlbum = new Album(AlbumTypes.JSAlbum);
// Now set JSAlbum custom properties.
Каков наилучший подход для достижения этой цели?
Спасибо и простите за длинный пост.