Kategorie: Refactoring

Fun with Refactoring

Leider verhält es sich mit TODOs wie mit den Flaggen an Nord- und Südpol. Sie überdauern die Jahre und sehen hin und wieder enttäuschte Gesichter von Abenteurern, die zu spät gekommen sind.

Weiterlesen

Kalenderspielereien mit Java – I18N

Die ersten drei Beiträge dieser Reihe handelten von einer Java API zur Feiertagsberechnung. In diesem Beitrag geht es um eine nachtragliche Verbesserung der Internationalisierung (I18N) und der minimalinvasiven Implementierung mit Hilfe des Decorator Design-Pattern.

Weiterlesen

Ein Schritt zurück bringt uns voran

Wer sich schon einmal an einer Staffelei versucht hat, der weiß, wie wichtig es ist, hin und wieder einen Schritt zurückzugehen. Der Schritt zurück gibt dem Maler die Möglichkeit, sein Werk im Ganzen zu betrachten. Häufig verliert der Künstler bei den Detailarbeiten das Gesamtwerk aus den Augen. Dann kann es passieren, dass die verschiedenen Bildbereiche nicht mehr zueinander passen und das Werk misslingt. Durch

Weiterlesen

Morden mit Mockito

Einer der wichtigsten Frameworks, um Unit Tests in Java zu schreiben, ist wohl Mockito. Kaum ein Projekt kommt ohne die Möglichkeit aus, Abhängigkeiten in den Testmethoden durch Mock Objekte zu ersetzen.

Leider ist jedes hilfreiche Framework in der Software Entwicklung auch eine Pandora Büchse

Weiterlesen

Unit Test Contracts mit Default Methoden

Lange Zeit habe ich mir das JUnit 5 Feature Test Interfaces nicht angeschaut, vermutlich weil mir default Methoden in Interfaces noch immer ein wenig suspekt sind. Langsam freunde ich mir mit diesen eigenartigen Schimären an und freue mich, endlich ein schönes Beispiel für Test Interfaces gefunden zu haben.

Weiterlesen

Morgan Le Fays Rückkehr

Die Verwendung von boolschen Ausdrücken ist eine Faktor, der die Lesbarkeit und das fehlerfreie Verständis eines Algorithmus maßgeblich beeinflusst. Schon im Beitrag Zauberei mit Wahrheiten wurden einige Probleme von komplizierter Logik angesprochen. Hier nun ein paar neue Beispiele für Code Smells, die sich um Wahrheitswerte ranken. Folgender kurzer Code zeigt ein typisches Konstrukt, das sich im Laufe der Zeit, wie Grünspan auf der Kirchturmspitze,

Weiterlesen

Ein alternativer Blick mit Jackson Views

„Willst du dich am Ganzen erquicken, so musst du das Ganze im Kleinsten erblicken.“ — Johann Wolfgang von Goethe Liest ein Entwickler seine Source ein zweites Mal, dann findet er mindestens drei Dinge die ihm nicht gefallen. Es gibt immer ein Design-Pattern, das hätte verwendet werden können, eine Bibliothek, die den Code kompakter gestaltet hätte oder ein Algorithmus, der alles vereinfachen würde. Die tatsächliche Implementierung

Weiterlesen

Programmieren auf Französisch – Tourette

„Die Behandlung dieser einzigartigen Störung oder mehr oder weniger ihre vollständige Behandlung bleibt noch zu entwickeln.“ — Georges Gilles de la Tourette Kennen Sie diese Entschuldigungen? „Wir hatten wenig Zeit„, „Für Reviews stand kein Kollege zur Vergütung„, „Da reglementiert uns keine Checkstyle Regel„, „Was Sonarqube nicht bemerkt, hat ausreichende Qualität„? Und natürlich die die Mutter aller Entschuldigungen „Das ist historisch gewachsen„. Diese Kollegen sind

Weiterlesen

Guard Decorator

Das Decorator Pattern bietet die Möglichkeit einem Objekt dynamisch zusätzliches Verhalten hinzuzufügen. Dazu werden Klassen die einen gemeinsamen Basistyp haben, ineinander geschachtelt.  Ein sehr bekanntes Beispiel für das Decorator Pattern ist in den Java IO Klassen zu finden. Zum Lesen aus einem Stream, wird die Klasse InputStream, bzw. eine ihrer vielen Subklassen verwendet. InputStream stream = new FileInputStream(new File(„data.txt“)); In diesem Beispiel wird aus

Weiterlesen

Refactoring mit Guard Clauses

Immer wieder finden sich Codefragmente, die sich in einer unnötig komplizierten Logik verlieren. Wie schon in Zauberei mit Wahrheiten angesprochen, sind es meist unterlassene Umstellungen im Code durch boolsche Umformungen. Parameter prüfen Eine häufige Ursache für die komplizierte Logik, ist die Prüfung der Eingangsparameter. Nicht alle Werte, die ein Parameter enthalten kann, machen Sinn für die Verarbeitung in der Methode. Daher werden sie abgefangen oder

Weiterlesen