Freitag, 17. Juli 2009

CCD Reflektion – Roter Grad Tag 3

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.

Keine Kommentare: