Vielleicht lesen einige dieses Blog und fragen sich, ob ich nicht mehr über CCD blogge…
Tatsache ist, dass ich gestern und heute nicht zum Programmieren kam. Andere Prioritäten haben Vorrang, also momentan kein Development und kein CCD.
Vielleicht lesen einige dieses Blog und fragen sich, ob ich nicht mehr über CCD blogge…
Tatsache ist, dass ich gestern und heute nicht zum Programmieren kam. Andere Prioritäten haben Vorrang, also momentan kein Development und kein CCD.
Mein Arbeitstag war heute relativ ruhig, aber auf der Heimfahrt habe ich noch einen Issue von ActiveRecord abgearbeitet. Dabei bin ich auf die Grenzen der Prinzipien gestoßen.
Es geht um diesen Code:
if (model.HasManyAtt.RelationType == RelationType.Map && model.HasManyAtt.Index == null)
{throw new ActiveRecordException(String.Format(
"A HasMany with type Map requires that you specify an 'Index', use the Index property {0}.{1} ",model.Property.DeclaringType.Name, model.Property.Name));
}
if (model.HasManyAtt.RelationType == RelationType.List && model.HasManyAtt.Index == null)
{throw new ActiveRecordException(String.Format(
"A HasMany with type List requires that you specify an 'Index', use the Index property {0}.{1} ",model.Property.DeclaringType.Name, model.Property.Name));
}
Das erste if-Statement war bereits vorhanden, dass zweite ist durch Copy/Paste entstanden. Ich war nun wirklich im Zweifel, ob ich nicht eine private Methode extrahieren soll.
Ich habe mich dagegen entschieden. Es handelt sich um zwei Statements, die ich durch einen Aufruf ersetzen könnte, und dass auch nur, wenn ich die Prüfung in einer Lambda-Expression vornehmen. Da die Klasse sowieso über 20 Methoden hat, hätte die Auslagerung die Lesbarkeit eher verringert als erhöht.
Also habe ich heute gegen DRY verstoßen und (meiner Meinung nach) trotzdem richtig gehandelt.
Ach ja, mein virtuelles Armband trage ich immer noch rechts und habe einen Issue für das Refaktorisieren der semantischen Prüfungen eröffnet.
Dieser Bericht kommt etwas später, da ich gestern keine Zeit hatte, einen Post zu verfassen. Die Reflektion habe ich schon durchgeführt, nur eben ohne Keyboard unter den Fingern.
Zunächst hatte ich mir nur vorgenommen, meine Commitrate weiterhin hoch zu halten, aber im Laufe des Tages wurde DRY ein Thema. Meine Haupttätigkeit war das Erstellen eines Modells für die Persistenz mit NHibernate.
Das hört sich zunächst nach einer relativ schwierigen Tätigkeit an, um DRY zu verletzen. Wäre es auch, wenn da nicht die Tests wären: Ich teste jede Klasse grundsätzlich, ob alle (halb-)öffentlichen (public und protected) Properties persistiert werden, um auszuschließen, dass eine Property beim Mapping vergessen wurde.
Diese Tests gleichen sich bei den Klassen strukturell sehr stark:
Bei der ersten Klasse habe ich das so geschrieben, bei der zweiten kopiert, gepastet und … nachgedacht: Da war doch was. So schnell kann man in die Clipboard-Falle gehen.
Also habe ich den Test in eine generische, abstrakte Basisklasse ausgelagert. Die einzige Operation, die bei jeder gemappten Klasse unterschiedlich ist, ist das Erzeugen des zu speichernden Objekts. Aber dafür gibt es schließlich abstrakte Methoden.
Was habe ich dadurch gewonnen? Schließlich ist es nur Testcode… ;-)
Spass beiseite, ich bin der Meinung, dass auch auf Testcode die ganze Breitseite von Clean-Code-Techniken angewandt werden muss. Schließlich sind zumindest bis zur Produktivnahme die Tests der am häufigsten ausgeführte Code der Anwendung.
Zumindest wenn man TDD und CI verwendet…
Wie in meinem vorherigen Post versprochen, habe ich mir ein virtuelles rotes Armband übergestreift und begonnen, bewusst auf die Einhaltung der CCD-Prinzipien zu achten. Allerdings nicht nach dem Gießkannenprinzip; dafür sind mir die meisten Techniken und Ideale bereits zu sehr in Fleisch und Blut übergegangen. Stattdessen habe ich mir einen einzelnen Punkt ausgesucht, den ich am heutigen Tag besonders beachtet habe: Die Nutzung des Versionskontrollsystems.
Ich nutze ausschließlich Subversion, also ein zentrales VCS. Mit der Zeit habe ich das regelmäßige Committen immer mehr schleifen lassen. Die Ursache kann ich nur erraten, aber ich denke, dass es mit meiner Arbeit am Castle-Projekt zu tun hat. Ich mache diese Arbeit fast immer offline und kann daher nur selten meine Änderungen committen. Dazu kommt, dass der Castle-Build auf meinem Laptop mehr als 10 Minuten dauert.
Das hat sich auf meine Arbeit übertragen, wo ich diese Probleme eigentlich nicht habe. Dennoch kam ich dort auch nur auf im Schnitt 2 Commits im Monat. Also höchste Zeit, aus dem Trott herauszukommen.
Mein Ziel war also, nicht nach jedem neuen Feature/User-Story, sondern (viel) öfter zu committen. Obgleich ich es (eigentlich) übertrieben finde, habe ich heute also nach jedem TDD-Zyklus committed.
Warum so oft? Damit der Commit genauso natürlich wird wie das Starten der Unit Tests, des lokalen Builds und das Holen von Kaffee. Nach unten wird sich die Commitrate wahrscheinlich von alleine regulieren. Und wenn nicht, ist es auch nicht schlimm… :-)
Letztes Wochenende war der .Net OpenSpace Süd in Blaustein bei Ulm. Es war mein erster OpenSpace überhaupt und ich fand es klasse, auch wenn es zu wenig Schlaf gab…
Zu den Slots, die ich besucht habe, gibt es noch ein paar Dinge zu ergänzen, was ich in den nächsten Wochen hier tun werde.
Ansonsten werde ich schauen, wann es wieder Events gibt. Leipzig wohl eher nicht, sondern kleinere Treffen, vielleicht in Köln oder Frankfurt.
Halt: Was ist denn nun mein Fazit?
Hmm…am ehesten, dass auch die “Community-Helden*” nur mit Wasser kochen. Wenn man sich das vor Augen hält und immer neuen Input sucht, kann man auch diesen Level erreichen.
*u. a. Stefan und Albert und die ganzen MVPs
Eine der ersten Folgen aus dem OpenSpace ist für mich, erneut über das Thema Clean Code Developer nachzudenken. Interessiert hat mich das Thema bereits vorher, aber ich bin kein Freund von Plastikarmbändern…
Viele der in CCD verankerten Prinzipien setze ich bereits um, aber ich werde natürlich auch im roten Grad anfangen. Dies hat einen einfachen Grund: ich will mich mit den Prinzipien und Techniken bewusst beschäftigen. Die meisten der im roten Grad angesprochenen Punkte laufen nebenher und werden im täglichen Doing nicht beachtet; und obwohl man sich doch “sowieso” an DRY hält, findet sich der Finger dann doch auf STRG+V wieder…
Also zurück zu den Plastikarmbändern: nein, ich mag immer noch keins tragen. Um meinen Fortschritt festzuhalten, werde ich stattdessen hier im Blog öffentlich reflektieren und meine durch bewusste Beschäftigung mit den Themen erlangten Erkenntnisse veröffentlichen.
Nach dem .Net OpenSpace Süd letztes Wochenende habe ich mich entschlossen, zusätzlich zu meinem englischen Blog wieder ein deutsches Blog zu führen.
Hier sind wir also. Nach über 1,5 Jahren wieder mal ein deutscher Post von mir.