Alaposztályok absztrakciók implementálására
Megjegyzés
Ezt a tartalmat a Pearson Education, Inc. engedélyével nyomtatjuk újra a Framework Design Guidelines: Conventions, Idioms és Patterns for Reusable .NET Libraries, 2nd Edition engedélyével. Ezt a kiadást 2008-ban adták ki, és a könyvet azóta teljesen átdolgozták a harmadik kiadásban. Előfordulhat, hogy az oldalon található információk némelyike elavult.
Szigorúan véve egy osztály alaposztály lesz, amikor egy másik osztály származik belőle. Ennek a szakasznak a alkalmazásában azonban az alaposztály egy olyan osztály, amelynek célja elsősorban egy közös absztrakció biztosítása, vagy más osztályok számára, hogy az öröklés ellenére újra felhasználják az alapértelmezett implementációt. Az alaposztályok általában az öröklési hierarchiák közepén, a hierarchia gyökerénél lévő absztrakció és az alul található több egyéni implementáció között találhatók.
Implementálási segítőként szolgálnak az absztrakciók implementálásához. Például a keretrendszer egyik absztrakciója a rendezett elemgyűjteményekhez az IList<T> interfész. A implementálás IList<T> nem triviális, ezért a keretrendszer számos alaposztályt biztosít, például Collection<T> az egyéni gyűjtemények implementálását segítő és KeyedCollection<TKey,TItem>segítő alaposztályokat.
Az alaposztályok általában nem alkalmasak arra, hogy önmagukban absztrakciókként szolgálnak, mivel általában túl sok implementációt tartalmaznak. Az alaposztály például Collection<T>
sok implementációt tartalmaz, amelyek a nemgenerikus IList
interfész implementálásával (a nemgenerikus gyűjteményekkel való jobb integráció érdekében) és azzal a ténnyel kapcsolatosak, hogy az egyik mezőjében a memóriában tárolt elemek gyűjteménye.
Ahogy korábban említettük, az alaposztályok felbecsülhetetlen segítséget nyújthatnak az absztrakciók implementálásához szükséges felhasználóknak, ugyanakkor jelentős felelősséget is jelenthetnek. Felszíni területet adnak hozzá, növelik az öröklési hierarchiák mélységét, és így elméletileg bonyolítják a keretrendszert. Ezért az alaposztályokat csak akkor szabad használni, ha jelentős értéket biztosítanak a keretrendszer felhasználói számára. Ezeket el kell kerülni, ha csak a keretrendszer megvalósítóinak adnak értéket, ebben az esetben az alaposztályból való öröklés helyett a belső megvalósításra való delegálást kell erősen figyelembe venni.
✔️ Fontolja meg az alaposztályok absztraktvá tételét akkor is, ha nem tartalmaznak absztrakt tagokat. Ez egyértelműen közli a felhasználókkal, hogy az osztály kizárólag örökölhető.
✔️ FONTOLJA meg az alaposztályok elhelyezését egy külön névtérben a fővonal-forgatókönyv-típusoktól. Az alaposztályok definíció szerint speciális bővíthetőségi forgatókönyvekhez készültek, ezért a felhasználók többsége számára nem érdekesek.
❌ KERÜLJE az alaposztályok "Base" utótaggal való elnevezését, ha az osztály nyilvános API-kban való használatra készült.
© Részletek 2005, 2009 Microsoft Corporation. Minden jog fenntartva.
Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, published 22, 2008 by Addison-Wesley Professional, a Microsoft Windows Development Series részeként.