Freitag, 16. November 2007

Den Briefkasten zuschweissen

Kürzlich überflog ein Kollege meinen Quelltext (es handelte sich um eine Implementierung die wir ziemlich eng zusammen ausgearbeitet haben).
"Was ist das denn?", er zeigte auf eine private Property.
Ein weiterer Bürobewohner eilte herbei um sich das Kunstwerk anzuschauen.
Nicht genug, dass sie private Properties nicht kannten, zogen sie anschliessend auch noch gemeinsam darüber her.
Das sei schlechter Stil, Properties seien Schnittstellenelemente und nicht für interne Zwecke, usw.

Ich bin da anderer Meinung - und verwende Properties auch gerne mal privat, internal oder protected. Nützlich ist das z.B. bei interner Lazy initialization:

Public Class frmEditor

Private m_CardSets As List(Of DataModel.CardSet)

Private Property CurrentCardSets() As List(Of DataModel.CardSet)
Get
If (Me.m_CardSets Is Nothing) Then
Me.m_CardSets = New List(Of DataModel.CardSet)
End If

Return Me.m_CardSets
End Get
End Property
End Class


Ist doch ganz nett oder? Lazy initialization krieg ich sonst nicht so schön - auch nicht mit einer Methode wie z.B. GetCurrentCardSets() wie ein Kollege vorschlug. Die Syntax ist wesentlicher unschöner: GetCurrentCardSets().Add(...) muss sich echt nicht mit CurrentCardSets.Add(...) messen wollen.

Wie verhindert man jetzt aber, dass der Programmierer diese lazy initialization nicht einfach umgeht und auf das backing field zugreift? Eine schöne Lösung dafür ist in VB.NET das Schlüsselwort static:

Public Class MyLazyPrivate
Private Property Cards() As List(Of Card)
Get
Static lazyList As List(Of Card)
If (lazyList Is Nothing) Then
lazyList = New List(Of Card)
End If
Return lazyList
End Get
End Property
End Class

Perfekt, so mag ichs, jetzt ist das Backingfield auch noch schön lokal. Ich verstehe sowieso nicht wieso Microsoft nicht schon lange eine Möglichkeit eingeführt hat das Backingfield auf den Scope der Property zu begrenzen. Wäre doch wesentlich sauberer, oder? Ok, zugegeben mit den automated Properties in VS08 macht Microsoft das ja ein wenig...

Achja, zum Titel:
Ausser, das Propertys eigenlich als Schnittstelle für die Auswelt gedacht
war.Das ist wie wenn ich an mein Briefkasten den Schlitz zuschweise.Ich kann
zwar jetzt Briefe dort sicher aufbewaren, das ist aber nicht im sinne des
Erfinders.....
ActiveVB Thread zum Thema.

Mittwoch, 14. November 2007

Testmatrix - Keine Tests in Assembly

In Visual Studio 2005 arbeite ich gerne mit dem Tool TestMatrix von http://www.exactmagic.com/
Ein gescheites Testing muss ja sein und dieses Tool integriert mir NUnit komfortabel in Visual Studio - zu einem akzeptablen Preis.

Heute hat mich das Tool aber der Verzweiflung nahe gebracht. Meine Solution kompilierte korrekt, aber TestMatrix konnte keine Tests finden. Nach langem suchen bin ich auf die Lösung gestossen. Der Output-Pfad war länger als 256 Zeichen. Beim Laden der Tests hat TestMatrix intern einen Fehler geworfen und desshalb das Laden der Tests abgebrochen.

Ich hoffe ich konnte damit jemandem helfen.

Dienstag, 13. November 2007

Welcome Blogging

So nun ists so weit. Lange habe ich mir Zeit gelassen.

Seit Jahren lese und lerne ich aus/in Blogs und habe schon manche Problemlösung gefunden. Ich habe nicht das Bedürfnis mich im Internet zu verewigen, nein - viel mehr möchte ich von dem gesammelten Erfahrungsschatz, unter anderem aus anderen Blogs, weitergeben. Nach Jahrelangem nehmen also nun auch mal geben. Ich hoffe ich finde genug Zeit um regelmässig neue Blogs zu schreiben - mache mir da aber keine falschen Hoffnungen.

Anyway... enjoy my postings... :)