Hi,
ich bin gerade über etwas älteren Code von mir gestolpert und Frage mich jetzt, wie ich den am Besten optimieren könnte. Folgendes ist die Basis:
Ich habe eine Datenbanktabelle "CONFIGURATION" in der, welch Überraschung, Konfigurationen gespeichert sind.
Die ist in etwa so Aufgebaut
Key1
Key2
Key3
Datentyp des Wertes
Eine Spalte pro Datentyp
Anhand von Key1 erkenne ich die Hauptgruppe zu der die Konfiguration gehört und die anderen Keys splitten das entsprechend nochmal auf.
In meiner Anwendung habe ich für Arten (Key1) von Konfigurationen unterschiedliche Klassen gemacht, also z.B. gibt es eine Klasse Mailkonfiguration, damit ich dann darin Methoden, wie getMailserver oder getSmtpPort verwenden kann, wegen der Lesbarkeit des Codes.
Es gibt aber auch eine Menge X an Konfigurationen zu Fremdsystemen, also Key1 ist "FREMDSYSTEM" und Key2 ist dann der Name des Systems. Das ergibt dann eine Konfiguration der Klasse Fremdsystem in der ich dann immer solche Methoden, wie getServer, getPort, getUsername, getPassword habe. Aber der Zugriff auf die Fremdsysteme geht nicht immer über denselben Kanal, also manche sind per REST angebunden, manche per Datenbank, usw. d.h. aktuell habe ich also als Eigenschaften in der Klasse sowas wie Username und Password, und danach noch eine HashMap mit dem "besonderen" Kram.
In der Anwendung heißt das dann, dass ich eine get-Methode habe, der ich quasi den Key3 als Parameter übergebe, damit ich den Value aus dem Map bekomme.
Und dann ist die Frage, ob man das noch weiter spezialisiert, um die Hashmap ganz los zu werden und für jedes Datum, das benötigt wird eine "echte" Methode zu haben? Am Ende des Tages baue ich jeden RestCall ja fast gleich auf. Unterscheiden tun die sich nur in der Art der Authentifizierung (Simple, LDAP,...).
Also macht es Sinn da für alles ein Interface zu bauen, oder sollte man das nicht ganz so tief spezialisieren? Oder ist es an der Stelle besser von einer Klasse zu erben? Aber wie ist das dann, wenn man etwas erweitert?
ich bin gerade über etwas älteren Code von mir gestolpert und Frage mich jetzt, wie ich den am Besten optimieren könnte. Folgendes ist die Basis:
Ich habe eine Datenbanktabelle "CONFIGURATION" in der, welch Überraschung, Konfigurationen gespeichert sind.
Die ist in etwa so Aufgebaut
Key1
Key2
Key3
Datentyp des Wertes
Eine Spalte pro Datentyp
Anhand von Key1 erkenne ich die Hauptgruppe zu der die Konfiguration gehört und die anderen Keys splitten das entsprechend nochmal auf.
In meiner Anwendung habe ich für Arten (Key1) von Konfigurationen unterschiedliche Klassen gemacht, also z.B. gibt es eine Klasse Mailkonfiguration, damit ich dann darin Methoden, wie getMailserver oder getSmtpPort verwenden kann, wegen der Lesbarkeit des Codes.
Es gibt aber auch eine Menge X an Konfigurationen zu Fremdsystemen, also Key1 ist "FREMDSYSTEM" und Key2 ist dann der Name des Systems. Das ergibt dann eine Konfiguration der Klasse Fremdsystem in der ich dann immer solche Methoden, wie getServer, getPort, getUsername, getPassword habe. Aber der Zugriff auf die Fremdsysteme geht nicht immer über denselben Kanal, also manche sind per REST angebunden, manche per Datenbank, usw. d.h. aktuell habe ich also als Eigenschaften in der Klasse sowas wie Username und Password, und danach noch eine HashMap mit dem "besonderen" Kram.
In der Anwendung heißt das dann, dass ich eine get-Methode habe, der ich quasi den Key3 als Parameter übergebe, damit ich den Value aus dem Map bekomme.
- Leidet dadurch die Lesbarkeit
- Ist das ganze nicht mehr "sicher" gegen Eingabefehler
Und dann ist die Frage, ob man das noch weiter spezialisiert, um die Hashmap ganz los zu werden und für jedes Datum, das benötigt wird eine "echte" Methode zu haben? Am Ende des Tages baue ich jeden RestCall ja fast gleich auf. Unterscheiden tun die sich nur in der Art der Authentifizierung (Simple, LDAP,...).
Also macht es Sinn da für alles ein Interface zu bauen, oder sollte man das nicht ganz so tief spezialisieren? Oder ist es an der Stelle besser von einer Klasse zu erben? Aber wie ist das dann, wenn man etwas erweitert?