Felder vs Eigenschaften
Am 13. Oktober 2008 haben Golo Roden und ich unter dem Titel Noch Fragen, Roden? Ja, Bucher! angekündigt, jeweils zum ersten eines jeden Monats einen Kommentar zu einem vorab gemeinsam gewählten Thema verfassen zu wollen.
Bisher sind in dieser Reihe folgende Kommentare erschienen:
Heute, am 1. Februar 2010, ist es nun wieder so weit, und unser Thema für diesen Monat lautet:
Felder vs Eigenschaften
So wohl Golo wie auch ich haben uns unabhängig voneinander im Vorfeld unsere Gedanken gemacht, wie wir diesem Thema gegenüberstehen. Golos Kommentar findet sich zeitgleich in seinem Blog, folgend nun mein Kommentar zu diesem Thema:
An mehreren Orten wird debattiert, ob es nun besser sei eine öffentliche Eigenschaft, oder öffentliches Feld zu benutzen.
Teilweise gehen die Meinungen Richtung KISS oder YAGNI, was auch teilweise nachvollziehbar war, als es noch keine automatischen Eigenschaften gab.
Eine Eigenschaft ist jedoch nicht dasselbe wie ein Feld, es hat eine andere Bedeutung.
Während ein Feld nur ein einfacher Datencontainer darstellt, also eine Variable auf Instanzebene, repräsentiert eine Eigenschaft eine Schnittstelle zu Daten jeglicher Art.
Eine Eigenschaft kann bspw. auch Daten aus mehreren Feldern und noch einer zusätzlichen Berechnung haben.
Die Implementierung einer Eigenschaft kann ohne Bedenken geändert werden, ohne das ein Benutzer neu kompilieren muss, es besteht also eine binäre Kompatibilität.
Das ist ein nicht zu unterschätzender Vorteil gegenüber Feldern, der es durchaus Wert ist, mehr Schreibarbeit und Code auf sich zu nehmen.
In den Framework Design Guidelines von Microsoft steht unter anderem auch:
Do not use instance fields that are public
Zu all diesen Vorteilen kommt noch hinzu, das beim Databinding explizit öffentliche Eignschaften gefordert sind.
Der aus meiner Sicht einzige Vorteil von öffentlichen Feldern ist Geschwindigkeit, sie sind definitiv schneller.
Allerdings sollte sowas - nur wenn nötig (Siehe auch Speedfreak) - auch nur in einer internen API so genutzt werden, die unter eigener Kontrolle steht.
Werden alle Vorteile der Eigenschaften zusammengezogen und ist keine Optimierung nötig, sollte immer eine Eigenschaft anstelle eines öffentlichen Feldes genutzt werden.
PS: Das Buch Framework Design Guidelines ist sehr zu empfehlen!