Alle Beiträge, Home, Technologien & Entwicklung

Warum weniger manchmal eben doch mehr ist

Gehören Sie zu den eher faulen Zeitgenossen?

Zugegeben, das klingt nicht gerade nach einer schmeichelhaften Frage. Und dennoch ist sie aus Sicht des Entwicklers goldrichtig mit einem “Ja” zu beantworten, wenn es um die “Lines of Code”, also die Anzahl der geschriebenen Programmzeilen, geht.

Warum das so ist? Guter Code ist kurz, prägnant und im besten Falle an anderen Stellen wiederverwendbar. Andererseits ist eine solch komprimierte Essenz fast immer das Ergebnis intensiven Arbeitsaufwandes. Und dieser kostet natürlich Zeit. So ist es nicht weiter verwunderlich, dass eine Aufgabe zwar oft gut und termingerecht gelöst wird, dabei jedoch mehr Programmzeilen entstehen als eigentlich notwendig. Noch ungünstiger wird es, wenn später eine ganz ähnliche Aufgabe nicht oder nur wenig von dem bereits vorhandenen Code profitieren kann und weitere Programmklassen erforderlich macht.

“Ich schreibe dir einen langen Brief, weil ich keine Zeit habe, einen kurzen zu schreiben.” (Blaise Pascal)

Am Beispiel einer zu erstellenden Tabelle möchte ich zeigen, wie eine Code Optimierung aussehen kann. Die Tabelle habe ich gewählt, da sie ein häufig genutztes Widget (grafische Komponente) bei der Entwicklung der jStage Lösungen darstellt, um dessen Einsatz sich ein Entwickler eigentlich nicht all zu viele Gedanken machen sollte.

Bisherige Tabellendefinition

Ursprünglich wurde für die Erstellung einer Tabelle ein Java “enum” Feld verwendet, um die Namen der einzelnen Tabellenspalten zentral und übersichtlich definieren zu können.

Dennoch beinhaltete diese Lösung nicht alle für die Tabelle notwendigen Daten und es war zusätzliche programmatische Eigenleistung gefragt, beispielsweise um eine Sortierung der Daten zu ermöglichen oder schlicht und ergreifend die Breite der Spalten vorzugeben. Im Grunde also alles Dinge, die sich wunderbar in Basismodule auslagern lassen. Doch dazu später mehr, zunächst richten wir den Blick auf die neue Tabellen Definition.

Neue Tabellendefinition

Auf den ersten Blick ist sie durch die zusätzlichen Parameter etwas gewachsen, aber was kann sie mehr? Sehen wir uns die neue Spaltendefinition einmal genauer an:

Zusätzlich zum Spaltennamen (“Benutzername”) definieren wir nun auch die Spaltenbreite (“150”) und geben vor, welcher Datentyp (“String.class”) angezeigt wird. Dieser wird zur Sortierung herangezogen, wobei einfache Datentypen wie String, Integer, Double oder Date in der neuen Variante ohne weiteres zu tun in die richtige Reihenfolge gebracht werden. Für komplexere Typen könnten wir aber auch einen eigenen Sorter (z.B. “ForeignCurrencySorter.class”) schreiben und an dieser Stelle angeben. Zuletzt wird mit einem Boolean definiert, ob die Spalte initial sortiert sein soll.

Der TableAdapter ist dafür zuständig, um zu einer Spalte den jeweils richtigen Inhalt zu liefern, also beispielsweise das Geburtsdatum oder die Anzahl von Urlaubstagen.

Die nachfolgend mit “@Override” Annotation versehenen Methoden sind ein Zugeständnis an die Verwendung eines enums. Dieses kann (aktuell) leider nur Interfaces implementieren, nicht aber von anderen Klassen ableiten.

Konkrete Umsetzung

Aus der angepassten Logik zur Umsetzung der neuen Tabellen Definition möchte ich einen konkreten Ausschnitt zur Sortierung herausgreifen.

Im Beispielcode wird geprüft, ob der angegebene Datentyp (“clazz“) selbst ein Sorter ist, und falls ja, auch als solcher verwendet wird. Andernfalls wird ein GenericTypeSorter erzeugt und der entsprechende (einfache) Datentyp clazz für die Sortierung übergeben.

Benefit

Letztlich konnte bei der Optimierung mehr als die Hälfte des bisher benötigten Codes für eine neue Tabelle eingespart werden.

Abschließend betrachtet profitieren nun alle Entwickler von der neuen Tabellen Definition, da kaum noch Programmieraufwand anfällt und auch kein besonderes Know How bei der Verwendung von Nöten ist. Die investierte Zeit für das Code Refactoring hat sich also gelohnt und im Sinne von Blaise Pascal können zukünftig sehr viele kurze Briefe geschrieben werden, obwohl unter Umständen nur wenig Zeit zur Verfügung steht.