Sinn von XML in Java

Status
Nicht offen für weitere Antworten.

Morgyr

Aktives Mitglied
Hallo.

Ich habe mich vor kurzem mit XML und anschließend mit Object Serialization und Preferences beschäftigt.
So nehme ich zumindest mal an, dass es wohl ein Sinn hat, extra Klasse und Methoden bereizustellen, um XML-Dateien zu verwalten.

Doch in einem gut geschriebenen (und vor allem auch größerem) Programm, dürfte XML doch kaum noch Sinn machen. So sollte (meiner Meinung nach) zumindest dafür gesorgt werden, dass alle Werte dort sind, wo sie hingehören und das sind nun mal die Klassen. Diese ließen sich also zum Speichern, ohne irgendwelche zusätzlichen Initialisierungen, serialisieren.

Für Konfigurationen, habe ich letztlich dann die Möglichkeit auf die Preferences zurückzugreifen, sprich mit Registry und den Gegenstücken dieser zu arbeiten. (Das setzt selbstverständlich voraus, dass man das Programm deinstallieren können muss.)

Letztlich habe ich durch die zwei Methoden den Vorteil, dass ein User, der sich mit XML nicht auskennt, auch nicht die Möglichkeit hat, etwas manuell zu verändern. Sozusagen als Schutz davor irgendwelche relevanten Werte zu ändern.
Wenn ich dem User die Möglichkeit geben möchte, die Konfiguration einzusehen, dann baue ich ihm eine GUI, die diese ausgibt. Wenn es unnötig ist, diese einzusehen, dann wird der User merken, dass er es nicht kann, es sei denn er kennt sich ausreichend mit der Registry(oder eben den Gegenstücken) aus oder kann unlesbaren Code lesen.

Also zu der Frage: Wieso soll ich noch XML in Java benutzen und damit erstmal komplexe Methode schreiben, die mir Variablen-Werte meiner Klasse in XML-Werte mit zugehörigem Tag umwandeln?

Mit freundlichen Grüßen
Morgyr
 

pinhead84

Aktives Mitglied
Morgyr hat gesagt.:
Also zu der Frage: Wieso soll ich noch XML in Java benutzen und damit erstmal komplexe Methode schreiben, die mir Variablen-Werte meiner Klasse in XML-Werte mit zugehörigem Tag umwandeln?
Spätestens wenn deine Daten die JVM verlassen, kann kaum ein externes Programm noch etwas mit deinem serialisierten Output etwas anfangen. XML dagegen ist unabhängig von Betriebssystem und Programmiersprache.

Morgyr hat gesagt.:
Wenn ich dem User die Möglichkeit geben möchte, die Konfiguration einzusehen, dann baue ich ihm eine GUI, die diese ausgibt.
Wie nobel von dir. In vielen Fällen kann oder will man aber auf eine GUI verzichten. Ich lobe mir z.B. die XML-Konfigurationen von Tomcat. Mit einem anständigen XML-Editor kann man besser damit arbeiten, als jede GUI es darstellen könnte. (vorausgesetzt man weiß, was man tut)
 

Morgyr

Aktives Mitglied
Gut, zu dem ersten gebe ich dir recht. Nur rechtfertigt das, meiner Meinung nach, keine zusätzlichen XML-Klasse, dafür kann ich mir nicht genug Fälle ausdenken, in denen das sinnvoll ist. Wenn ich es dort anwende, muss auch die andere Sprache in der Lage sein, eine solche Datei zu verarbeiten. Klar, die zu verarbeiten ist letztlich kein großes Ding, aber dabei noch auf irgendwelche Schemata oder DTD zu achten und das ganze wohlgeformt zu gestalten, macht das ganze komplex, und in dem Sinn kann es dann schon wieder die Wahlmöglichkeit geben, für ein paar Daten ein eigenes Format zu erstellen, eben je nach Aufwand/Zweck.


Wozu muss ein User(als Enduser) wissen, was in der XML steht? Geschweige denn, welcher ganz normale User hat einen XML-Editor installiert? Das Resultat wird er sehen, wenn er was ändern oder erstmal lesen möchte, geht er in den Optionen-Bereich. Für einen Enduser reicht das. Und vor allem, er weiß eben oft nicht, was er tut.
 
B

Beni

Gast
Schemata, DTD?: niemand zwingt dich dies zu erstellen oder zu prüfen. Es ist natürlich schön wenn es eine Dokumentation des Formates gibt... aber auch eine XML-Datei ohne diese Dinge wird von einem externen Programm besser verarbeitet als eine Serialisierungs-Datei.

Gibt es externe Programme?: Bist du sicher, dass dein Programm nie durch eine Version 2 ersetzt wird? Du weisst nicht was Version 2 sein wird (und welche Sprache dafür verwendet wird). Oder ein OpenSource-Programmierer findet deine Dateien toll, nicht aber dein Programm und baut sich deshalb selber ein neues. So wie z.B. MS Office vs. OpenOffice.

Noch ein Argument: XML ist extrem flexibel. Wenn du mal deine Klassenhierarchie umbauen musst, Felder löschst, umbenennst und hinzufügst, dann wird eine Serialisierungs-Datei irgendwann um die Ohren fliegen. Eine XML-Datei wirst du immer lesen können und auch verschiedene Versionen wild mischen.
 

Wildcard

Top Contributor
Serialisierung ist keine Persistierung. Viel zu unflexiblel, viel zu anfällig. Wird eigentlich nur benutzt um Daten über ein Socket zu schießen, oder ins Clipboard zu transferieren.
Morgyr hat gesagt.:
Also zu der Frage: Wieso soll ich noch XML in Java benutzen und damit erstmal komplexe Methode schreiben, die mir Variablen-Werte meiner Klasse in XML-Werte mit zugehörigem Tag umwandeln?
Komplexe Methode schreiben?
Wenn ich XML verwende, dann mit einem XML Binding Framework (vorzugsweise EMF). Ich erstelle das Metamodell (z.B. als XML Schema, oder UML Diagramm) und das Binding-Framework erstellt die passenden Java Klassen. Damit ist XML auf Java Objekte abgebildet und ich habe mir jede Menge Code für das Modell gespart.
Bei EMF lässt sich das Modell zusätzlich noch auf Hibernate und Konsorten mappen, der Objektbaum bringt eine vollständige Notification Schnittstelle mit, ist Undo-/Redo fähig, unterstützt SQL-Queries, Transaktionen inkl. Roll-Back, lässt sich mit einem generischen Differentiator vergleichen, lässt sich zur Runtime Reflection-Basiert beliebig erweitern, ...
 

Wildcard

Top Contributor
pinhead84 hat gesagt.:
@Wildcard: EMF hört sich interessant an. Kann man das auch unabhängig von Eclipse verwenden?
Ja, allerdings mit etwas weniger Features. Du kannst den Eclipse Compare Editor nicht verwenden und du kannst dir keinen fertigen Editor generieren lassen. Das Modell selbst und der optionale Edit Code zum Anzeigen und Manipulieren des Modells sind jedoch Eclipse Unabhängig, du musst lediglich ein jar einbinden.
 

Morgyr

Aktives Mitglied
Oje. Ich habe wohl eine wichtige Sache vergessen.
Wenn ich ein Objekt serialisiere, anschließend in meinem Programm der Klasse meines Objekts irgendwelche Variablen und Methode ändere/hinzufüge/lösche und dann versuche, das Objekt zu laden, dann bekomme ich eine Exception (ClassNotFoundException?)?
Wenn ja, wäre das selbstverständlich fatal. Das habe ich vollkommen übersehen.

Das es sowas wie EMF gibt, wusste ich nicht. ICh werde mir das mal angucken.
 

Grasstampfer

Gesperrter Benutzer
Morgyr hat gesagt.:
Oje. Ich habe wohl eine wichtige Sache vergessen.
Wenn ich ein Objekt serialisiere, anschließend in meinem Programm der Klasse meines Objekts irgendwelche Variablen und Methode ändere/hinzufüge/lösche und dann versuche, das Objekt zu laden, dann bekomme ich eine Exception (ClassNotFoundException?)?
Wenn ja, wäre das selbstverständlich fatal. Das habe ich vollkommen übersehen
daher wird man vom compiler (jedenfalls von eclipse ;-) ) ab 1.5 gewarnt, wenn man nicht die serialversionuid gesetzt hat...
 

HoaX

Top Contributor
wenn keine da ist generiert der kompiler eine. solang man nicht selbst in read/writeObject rumfummelt kann die eigentlich gefahrlos weggelassen werden
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Public oder Private oder Protected Sinn Allgemeine Java-Themen 14
A Best Practice Wie viele Referenzen machen Sinn? Weniger ist mehr? Allgemeine Java-Themen 1
T Sinn einer toString Methode Allgemeine Java-Themen 3
M Sinn von Kompilierung zur Laufzeit Allgemeine Java-Themen 3
M Sinn von Threads? Allgemeine Java-Themen 1
Thallius Macht das Sinn? Allgemeine Java-Themen 30
A Methoden Der Sinn von system.out.print(); Allgemeine Java-Themen 9
E Serialisierung - Sinn einer generierten serialVersionUID? Allgemeine Java-Themen 4
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
E einfaches Beispiel zu MVC und Sinn V --> M ? Allgemeine Java-Themen 22
F Sinn des Serializable Interfaces Allgemeine Java-Themen 8
S Konstrukt Sinn, Zewck und Name Allgemeine Java-Themen 6
N Für welche Art von Berechnungen macht JCUDA Sinn? Allgemeine Java-Themen 12
A Was ist der genau Sinn eines Interface? Allgemeine Java-Themen 13
H Was ist der genau Sinn von tString()? Allgemeine Java-Themen 3
MiMa Grundsätzliche Frage zur Verwendung von Java Versionen?? Allgemeine Java-Themen 3
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
lalex1491 Java Aktienkurse nachfragen Allgemeine Java-Themen 4
J Class to link Java Allgemeine Java-Themen 4
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
mrStudent Inferenz JAVA Allgemeine Java-Themen 6
U URI Rechner (Java Script) Allgemeine Java-Themen 7
TheSkyRider Java Geburtsdatum Textfeld Allgemeine Java-Themen 7
mihe7 Java 19 JavaDocs: Browserintegration Allgemeine Java-Themen 0
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
C Fußnoten von DocX mit Java Allgemeine Java-Themen 2
C Fußnoten in DocX mit Java Allgemeine Java-Themen 1
M Aussagenlogik in Java Programmieren Allgemeine Java-Themen 22
B Per Java Word Dokument schreiben? Allgemeine Java-Themen 8
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
KonradN Oracle übergibt (Java Teile der) GraalVM Community Edition an OpenJDK Community Allgemeine Java-Themen 2
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
B Java mit command line und jars benutzen? Allgemeine Java-Themen 18
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
Mick P. F. Wie kriege ich die Fehlermeldung "java: symbol lookup error: ..." weg? Allgemeine Java-Themen 11
K Nachhilfe Java Allgemeine Java-Themen 11
KonradN Java 19 Allgemeine Java-Themen 11
F IDEA IntelliJ Java Songliste erstellen Allgemeine Java-Themen 6
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
E Java und integrierte Grafikkarten Allgemeine Java-Themen 18
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Peterw73 Hilfe bei Java gesucht Allgemeine Java-Themen 3
A Java unter Win 10 Allgemeine Java-Themen 1
B Woher kommen die Bildschirmkoordinaten beim java Robot? Allgemeine Java-Themen 14
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
T Java Robot Class - Bot Allgemeine Java-Themen 3
E Wie Java Heap Space vergrößern? Allgemeine Java-Themen 3
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
izoards Java Home Pfad unabhängig von der Version Allgemeine Java-Themen 7
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
KonradN CVE-2022-21449: Fehler in Java bei Signaturprüfung Allgemeine Java-Themen 20
berserkerdq2 Java sql Allgemeine Java-Themen 15
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
LimDul XSD To Java - Überschreiben von Assoziationen Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben