Konzept: Klasse / Entity für Einstellung der Software

internet

Top Contributor
Hallo,

ich überlege derzeit, wie ich innerhalb einer Web-Applikation "Einstellungen" in der Datenbank speichern kann, sodass ich von der GUI darauf zugreifen kann und diese aktivieren / deaktivieren kann.

Sowas wie hier:
10-0.png


Um nun nicht 1000 Properties in eine Tabelle aufzunehmen, möchte ich das dynamisch halten, sodass für jede Setting es einen Datenbankeintrag gibt.

Mir schwebt dazu folgendes Konzept vor:
Eine Datenbank - Tabelle anlegen:

ApplicationSetting
- ID
- uniqueName (bspw: "resetPassword")
- dataType (String, Integer, Double Boolean) -> Typ wird als String - Wert gespeichert...
- valueString
- valueInteger
- valueDouble
- valueBoolean

Um die verschiedenen Datentypen zu speichern, lege ich eben verschiedene Felder an für String, Double usw.

Erweitern könnte man das u.a. noch
a) mit einer XML, welche beim Start der Applikation ausgelesen wird und die Werte dann gespeichert werden
b) Weitere Datenbank - Tabelle ApplicationSettingGroup (um die Settings zu gruppieren)

Ich würde nun gerne wissen, ob das Konzept so passt oder was man besser machen könnte?
 
K

kneitzel

Gast
Also ich handhabe es meist so, dass ich Werte als String speichere. Also ähnlich, wie es ja auch in einer Properties Datei als String hinterlegt ist.

Das wird ja nur einmalig gelesen und da spielt das Parsen der Werte keine Rolle.
 

internet

Top Contributor
Ok, also du hast dann quasi nur:

ApplicationSetting
- ID
- uniqueName (bspw: "resetPassword")
- value

Value ist dann vom Typ String / Varchar?
Und wie wandelst du das dann später in den richtigen Datentyp um (boolean, Date, Double... )?
 
K

kneitzel

Gast
Die Frage ist, wie Du es genau modellieren willst. Ich sehe hier gerade zwei Möglichkeiten.

Die erste Möglichkeit ist das, was wir derzeit in der Regel haben:

Wir haben feste Konfigurationen. Also da wird nichts dynamisch dazu kommen. (Das dürfte ja der Standard sein). Das bedeutet, dass wir eine Klasse haben, in der die Konfiguration ablegen. Sprich: Da sind dann Getter / Setter zu finden. Da wollen wir auch immer alles haben und die haben dann die Typen, die wirklich benötigt werden, also int, String, LocalDateTime, double, Integer, Double, ...

Damit wir nicht immer wieder irgendwas neu schreiben müssen, erbt die Klasse von einer ConfigBase Klasse. Diese hat dann im Kern eine einfache Properties Instanz.
Dazu gehören dann viele Funktionen wie:
- Laden / Speichern der Werte. Das kommt meistens aus Dateien, aber das kann prinzipiell alles sein. Wie geladen / gespeichert ist, ist in einem ConfigAdapter festgelegt, d.h. neue Quellen sind einfach hinzu zu nehmen.
- Parsen / Prüfen / in String schreiben Methoden. Also das sind dann einfache Methoden wie
int getIntProperty(final String key, final int default)
void setIntProperty(final String key, final int value)

In der Config Klasse, die wir dann schreiben, haben wir dann
a) eine Konstante für den key: public static final string KEY_SOME_VALUE = "some.value";
b) ggf. einen Default Wert, der genommen wird, wenn der key nicht vorhanden ist: public static final int DEFAULT_SOME_VALUE = 1;
c) dann kommen getter / setter, die aber einfach aufgebaut, da eigentlich nur protected Methoden aufgerufen werden... dann ist da also einfach im Getter etwas wie return getIntProperty(KEY_SOME_VALUE, DEFAULT_SOME_VALUE);

Damit schreiben wir derzeit unsere Config-Klassen.

Das wäre mein Ansatz. Da betrachte ich die Datenbanktabelle nicht als normale Entities.

Aber dagegen spricht natürlich auch nichts. Da kannst Du sogar noch ein Feld Validation hinzu nehmen, der dann aber Validierungsregeln für den jeweiligen Typ beinhaltet.

Dann kannst Du darauf zu greifen wie sonst auch bei anderen Entities. Ist natürlich auch voll in Ordnung.

Ich selbst mag halt gerne eine Komponente, die ich injecten kann, die dann entsprechende Getter hat (Das ist der Hauptnutzen bei uns). Der Key interessiert mich im Code nicht, auch wenn er als public in der Klasse definiert wurde.

Ganz wichtig: Das ist einfach nur, was ich gemacht habe. Das wird der Eine oder Andere bestimmt komplett anders sehen....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
S ResultSet als Parameter an andere Klasse übergeben Datenbankprogrammierung 3
F Mapping einer SQL Abfrage in eine Klasse Datenbankprogrammierung 4
J Nur CRUD über Datenbank Klasse, oder auch mehr ? Datenbankprogrammierung 2
F Mapping SQL mit Klasse Datenbankprogrammierung 7
L MySQL Database Helper Klasse mit Consumer Datenbankprogrammierung 7
S Mithotec-Klasse Datenbankprogrammierung 6
P MySQL-Verbindung in anderer Klasse nutzen Datenbankprogrammierung 2
M Wie übergebe ich Datenbankobjekte aus einer sql-Datenbank einer Java Klasse bzw. Instanz Datenbankprogrammierung 7
I SQLite Objekt speichern einer Serialisierter Klasse Datenbankprogrammierung 1
G ArrayList aus Verschiedenen klasse füllen Datenbankprogrammierung 5
H Klasse welche Mysql Daten zurück gibt Datenbankprogrammierung 18
F JPA und Klasse "User" Datenbankprogrammierung 3
S MySQL Datenbankanbindung extra Klasse Datenbankprogrammierung 10
E MySQL Klasse zur Abfrage statisch oder Standard Datenbankprogrammierung 5
A Connection Variable in anderer Klasse verwenden -> statement Datenbankprogrammierung 2
T Klasse zum Syntaxcheck Datenbankprogrammierung 2
G Hibernate: wie @ManyToOne Referenz auf eigene Klasse? Datenbankprogrammierung 1
S Aus ResultSetMetaData Klasse dynamisch erzeugen Datenbankprogrammierung 3
P Neues Attribut in Entity-Klasse Datenbankprogrammierung 3
W XML Klasse in Datenbank speichern? Datenbankprogrammierung 5
N resultset aus andere klasse übergeben Datenbankprogrammierung 3
P Klasse in Datenbank speichern Datenbankprogrammierung 4
A DB-Klasse für häufig verwendete Aufgaben Datenbankprogrammierung 6
I Keine Treiber-Klasse! Datenbankprogrammierung 9
H Aufbau einer DB-Klasse Datenbankprogrammierung 10
J Klasse für Datensatzblättern in Verbindung mit JTable gesuch Datenbankprogrammierung 6
M Die ganze klasse als eigenen Thread laufen lassen Datenbankprogrammierung 3
G gutes design für db-klasse Datenbankprogrammierung 3
N Datenbank in diese Klasse einfügen Datenbankprogrammierung 4
torresbig MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger) Datenbankprogrammierung 19
J Netbeans 11 und Eclipse JPA 2.5 Entity wird nicht gefunden Datenbankprogrammierung 4
D MySQL Transaktionen in Entity-Class Datenbankprogrammierung 15
T Ebean Not an Entity Datenbankprogrammierung 1
V HSQLDB detached entity passed to persist: server.Employee Datenbankprogrammierung 4
H Entity in Java implementieren Datenbankprogrammierung 13
Y Entity must be managed to call remove Datenbankprogrammierung 1
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
T IllegalArgumentException: Person[ id=null ] is not a known entity type.??? Datenbankprogrammierung 0
R eclipselink - referenzierte Entity löschen Datenbankprogrammierung 0
Z ER Diagramm erstellen (Entity-Relationship) Datenbankprogrammierung 4
B Feld in einer @Entity als Text speichern Datenbankprogrammierung 5
K Entity-Klassen generieren Datenbankprogrammierung 4
D Datenbank Entity Datenbankprogrammierung 3
C Hibernate Liste mit allen Objekten einer Entity Datenbankprogrammierung 17
T org.hibernate.MappingException: entity class not found Datenbankprogrammierung 4
D org.hibernate.MappingException: Unknown entity mit Annotations Datenbankprogrammierung 9
P Hibernate -> SQL verwenden und keine Entity Datenbankprogrammierung 19
M Problem mit @Entity Datenbankprogrammierung 18
R JPA, Spring, löschen einer Entity Datenbankprogrammierung 2
G Entity Realtionship Model erstellen Datenbankprogrammierung 11
QDog JPA: Entity "laden" und später updaten Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben