Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
8
rozdział1PodstawyWstrzykiwaniazależności:co,jakidlaczego
3
Fabrykaabstrakcyjna
Fabrykaabstrakcyjnatozzasady
abstrakcja
zawierającawielemetod,akażdaznich
pozwalanastworzeniepewnegorodzajuobiektu3.
TypowoFabrykęabstrakcyjnąwykorzystujesięwprzypadkubibliotekinterfejsuużytkow-
nika(ui)lubaplikacjiklienckiej,któremusząbyćuruchomionenawieluplatformach.Aby
osiągnąćwysokistopieńmożliwościponownegoużyciakodunawszystkichplatformach,
można,naprzykład,zdefniowaćabstrakcję
IUIControlFactory
pozwalającąnastwo-
rzeniepewnychrodzajówelementówinterfejsuużytkownika,takichjak:ramkitekstowe
orazprzyciskidlaużytkowników:
publicinterfaceIUIControlFactory
{
IButtonCreateButton();
ITextBoxCreateTextBox();
}
DlakażdegosystemuoperacyjnegomożnamiećinnąimplementacjętakiegoIUIControl-
Factory.Wtymwypadkuistniejątylkodwiemetodyfabryki,alewzależnościodaplikacji
lubbibliotekiinterfejsuużytkownikamogłobybyćichowielewięcej.Ważnąkwestiądozapa-
miętaniajestto,żejednaFabrykaabstrakcyjnaokreślapredefniowanąlistęmetodfabryki.
Wewstępiedotegorozdziałunapisaliśmy„współpracująceklasy(…)powinnypolegać
nainfrastrukturze(…)wceluzapewnienianiezbędnychusług”.Jakamożebyćpierwsza
myślnatemattegozdania?Czymożnasobiewyobrazićinfrastrukturęjakojakiegoś
rodzajuusługę,którąodpytujesię,byotrzymaćpotrzebneZALEŻNOŚCI?Jesttobardzo
powszechnemyślenie.Wieluprogramistówiarchitektówwidzi
DI
jakoserwis,który
możebyćużytydonamierzeniainnychusług.Takiezastosowanienazywasię
LOKALIZA-
TOREMUSŁUG.JednakjesttocałkowiteprzeciwieństwoDI.
LOKALIZATORUSŁUG
nazywanyjestczęstoFabrykąabstrakcyjnąnasterydach,ponieważ
wporównaniudozwykłejFabrykiabstrakcyjnejlistatypówrozwiązywalnychjestniespre-
cyzowanaiprawdopodobnienieskończona.Zzasadymaonajednąmetodępozwalającą
nastworzeniewszystkichrodzajówtypów,mniejwięcejjakwtymprzykładzie:
publicinterfaceIServiceLocator
{
objectGetService(TypeserviceType);
}
WAŻNE:
Jeśliktośsądził,że
DI
to
LOKALIZATORUSŁUG
(wznaczeniufabrykiogól-
negoprzeznaczenia),powiniensięoduczyćtakiegomyślenia.
DI
jestprzeciwień-
stwem
LOKALIZATORAUSŁUG
.Tomożliwośćukładaniakoduwtakisposób,bynigdy
niebyłokoniecznościzapytańoZALEŻNOŚCI.Raczejwymagasięodużytkownika
kodu,abytoonijedostarczali.
3
E.Gammaetal.,op.cit.,87.