Delen via


Abstracties (abstracte typen en interfaces)

Notitie

Deze inhoud wordt opnieuw afgedrukt door toestemming van Pearson Education, Inc. van Framework Design Guidelines: Conventions, Idioms en Patterns for Reusable .NET Libraries, 2nd Edition. Die editie werd in 2008 gepubliceerd en het boek is sindsdien volledig herzien in de derde editie. Sommige informatie op deze pagina is mogelijk verouderd.

Een abstractie is een type dat een contract beschrijft, maar geen volledige implementatie van het contract biedt. Abstracties worden meestal geïmplementeerd als abstracte klassen of interfaces, en ze worden geleverd met een goed gedefinieerde set referentiedocumentatie waarin de vereiste semantiek van de typen die het contract implementeren beschrijft. Enkele van de belangrijkste abstracties in .NET Framework zijn Stream, IEnumerable<T>en Object.

U kunt frameworks uitbreiden door een concreet type te implementeren dat ondersteuning biedt voor het contract van een abstractie en dit concrete type te gebruiken met framework-API's die de abstractie gebruiken (werken).

Een zinvolle en nuttige abstractie die bestand is tegen de tijdstest is zeer moeilijk te ontwerpen. De belangrijkste moeilijkheid is het krijgen van de juiste set leden, niet meer en niet minder. Als een abstractie te veel leden heeft, wordt het moeilijk of zelfs onmogelijk om te implementeren. Als het te weinig leden heeft voor de beloofde functionaliteit, wordt het in veel interessante scenario's nutteloos.

Te veel abstracties in een framework hebben ook een negatieve invloed op de bruikbaarheid van het framework. Het is vaak vrij moeilijk om een abstractie te begrijpen zonder te begrijpen hoe het in het grotere beeld van de concrete implementaties en de API's past die op de abstractie werken. Ook zijn namen van abstracties en hun leden noodzakelijkerwijs abstract, waardoor ze vaak cryptisch en onherstelbaar zijn zonder eerst de bredere context van hun gebruik te begrijpen.

Abstracties bieden echter uiterst krachtige uitbreidbaarheid die niet vaak overeenkomt met de andere uitbreidbaarheidsmechanismen. Ze vormen de kern van veel architectuurpatronen, zoals invoegtoepassingen, inversie van beheer (IoC), pijplijnen enzovoort. Ze zijn ook uiterst belangrijk voor de testbaarheid van frameworks. Goede abstracties maken het mogelijk om zware afhankelijkheden te stuben voor het testen van eenheden. Kortom, abstracties zijn verantwoordelijk voor de gewilde rijkdom van de moderne objectgeoriënteerde frameworks.

❌ GEEF GEEN abstracties tenzij ze worden getest door verschillende concrete implementaties en API's te ontwikkelen die de abstracties gebruiken.

✔️ KIES zorgvuldig tussen een abstracte klasse en een interface bij het ontwerpen van een abstractie.

✔️ OVERWEEG referentietests te verstrekken voor concrete implementaties van abstracties. Met dergelijke tests kunnen gebruikers testen of hun implementaties het contract correct implementeren.

© Delen 2005, 2009 Microsoft Corporation. Alle rechten voorbehouden.

Herdrukt door toestemming van Pearson Education, Inc. van Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, published oct 22, 2008 by Addison-Wesley Professional als onderdeel van de Microsoft Windows Development Series.

Zie ook