Próbuję poprawić mój styl kodowania. Rozważmy następujący scenariusz:
Załóżmy, że chcę zdefiniować niestandardowy kontroler serwera Albumu ASP.Net. Celem jest umożliwienie użytkownikowi wyboru rodzaju albumu, a wszystkie inne rzeczy zostaną wykonane przez kontrolę.
Myślałem o 2 podejściach:Najlepszy wzór dla następnego scenariusza
1 Zdefiniuj interfejs IAlbum i zdefiniuj klasę (która implementuje IAlbum) dla każdego typu albumu. Na przykład:
public class FlashAlbum : IAlbum
{
// Implement IAlbum Methods...
// FlashAlbum-Specific Properties/Methods.
}
public class JSAlbum : IAlbum
{
// Implement IAlbum Methods...
// JSAlbum-Specific Properties/Methods.
}
Jeśli użytkownik chce mieć album flash, powinien jawnie utworzyć obiekt FlashAlbum. coś takiego:
var myFlashAlbum = new FlashAlbum(/*FlashAlbumParameters*/);
var myJSAlbum = new JSAlbum(/*JSAlbumParameters*/);
Problem polega na tym, że nie chcę, aby użytkownik miał do czynienia z wieloma typami albumów. Przeczytaj poniżej, aby zrozumieć, co mam na myśli.
2- zdefiniować iAlbum, definiować klasę (który realizuje iAlbum) dla każdego typu albumu (jak wyżej) i określenie klasy, które Album
nie implementuje iAlbum. Służy do tworzenia instancji albumu w swoim contructor (wzór fabryczny). Definiowanie EnumAlbumTypes:
Public Enum AlbumTypes
{
FlashAlbum,
JSAlbum
}
teraz zdefiniować konstruktora dla klasy dominującej album, który przybiera parametr typu EnumAlbumTypes i tworzy odpowiedni album w oparciu o parametr. Wolę tę metodę. Ale nie jestem bardzo zaznajomiony z wzorcem fabrycznym. Chcę, aby użytkownik utworzył albumy takie jak:
var myFlashAlbum = new Album(AlbumTypes.FlashAlbum);
// Now set FlashAlbum custom properties.
var myJSAlbum = new Album(AlbumTypes.JSAlbum);
// Now set JSAlbum custom properties.
Jakie jest najlepsze podejście, aby to osiągnąć?
Dzięki i przepraszam za długi post.
Wydaje się, że odpowiadasz na własne pytanie. Wydaje się, że wzór fabryczny lepiej odpowiada oczekiwaniom użytkownika, że użytkownik nie musi zajmować się wieloma typami albumów poprzez hermetyzację tworzenia określonego typu. Jakie masz obawy dotyczące wdrożenia tego schematu? –
Jak widać w moim kodzie, nieprawidłowo wywoływałam główną klasę fabryczną. 'new Album (AlbumType.FlashAlbum)' jest poprawny. Powinienem nazywać to tak: 'AlbumFactory.Create (AlbumType.FlashAlbum)'. P.S. Ponieważ jestem nowy w używaniu wzorców projektowych, chciałem się upewnić, że jestem na dobrej drodze. – Kamyar