Elegante Programmierung.

Status
Nicht offen für weitere Antworten.

DocMcFly

Bekanntes Mitglied
Hallo,

Ich hab eine kleine Bibliothek gebastelt, welche XML-Daten verarbeitet. Unter anderem bietet sie zwei Methoden an:

Code:
public void             xml_setForm(InputStream _inputStream) throws IOException, JDOMException;
public OutputStream     xml_getForm() throws IOException;

Diese zwei Methode "laden" den xml-Strom und "spucken" ihn wieder aus. Um das so offen wie möglich zu halten, habe ich nur Input- und OutputStream verwendet. (Halte ich für elegant :) )

Jetzt mein Problem:

Jetzt soll aus dem XML-OutputStream eine Prüfsumme erzeugt werden. Dafür die Methode:
Code:
public String           xml_getFormFingerPrint();

Für reine Prüfsummen hab ich auch bereit statische Methoden - diese funktionieren mit String, StringBuffer und InputStreams. - Aber nicht mit OutputStreams.

Und ehrlich ich habe keinen Plan, wie ich aus dem OutputStream einen InputStream machen kann? Geht das überhaupt? Gibt es ein Objekt, welches nen OutputStream an nimmt und eine ByteArray... oder so was ähnliches ausgibt?

Vielen Dank fürs lesen und antworten

Clemens
 

foobar

Top Contributor
Diese zwei Methode "laden" den xml-Strom und "spucken" ihn wieder aus. Um das so offen wie möglich zu halten, habe ich nur Input- und OutputStream verwendet. (Halte ich für elegant)
Wofür? Wenn ich mit Xml arbeite will ich gezielt einzelne Knoten auswählen, bearbeiten, entfernen etc. ein In/Outputstream bringt mich da nicht weiter.

BTW Bitte verwende die Camelcase-Schreibweise, wir machen hier Java und nicht C.
 

DocMcFly

Bekanntes Mitglied
Wofür? Wenn ich mit Xml arbeite will ich gezielt einzelne Knoten auswählen, bearbeiten, entfernen etc. ein In/Outputstream bringt mich da nicht weiter.

Doch und zwar für einen ganz trivialen Einsatz: Laden und Speichern! Wenn ich nur Streams verwende, kann der Nutzer der Bibliothek ganz einfach selbst entscheiden, woher er die XML-Daten herholt und wohin er zu zum Schluß die XML-Daten hinpackt. Wenn ich die Streamverwende, kann er sie in der DB genausogut ablegen, wie im Dateisystem, in übers Netz versenden...

Meine Frage lautete aber auch eine Andere: Kann man OutputStream in einen InputStream leiten? Ja - Nein - Vielleicht?


BTW Bitte verwende die Camelcase-Schreibweise, wir machen hier Java und nicht C.

Ich weiß: Aber diese Schreibweise macht vieles einfacher:

Da die Bibliothek in mehrere Formaten ausgeben soll: existiren auch Methoden, wie:

Code:
public String           html_getForm();
public JComponent      swing_getForm();

So kann man gleich vorne erkennen, um welches Format es sich handelt. ("Camelcase" - verwende ich normalerweise auch - habe mich in diesem Fall ganz konkret dagegen entschieden.)

Trotzdem Danke ... Clemens
 

foobar

Top Contributor
Da die Bibliothek in mehrere Formaten ausgeben soll: existiren auch Methoden, wie:
Das ist aber nicht die feine Art. Implementier doch lieber eine Methode getForm(FormType type), die je nachdem welcher Parameter übergeben wurde einen anderen Typ liefert. Als Rückgabewert kannst du dann entweder Object verwenden oder du schreibst dir ein Interface, daß die Daten kapselt.

Kann man OutputStream in einen InputStream leiten
Guckst du hier: http://java.sun.com/j2se/1.3/docs/api/java/io/PipedOutputStream.html
 

byte

Top Contributor
DocMcFly hat gesagt.:
Da die Bibliothek in mehrere Formaten ausgeben soll: existiren auch Methoden, wie:

Code:
public String           html_getForm();
public JComponent      swing_getForm();

So kann man gleich vorne erkennen, um welches Format es sich handelt. ("Camelcase" - verwende ich normalerweise auch - habe mich in diesem Fall ganz konkret dagegen entschieden.)

Mit dieser Form kann ich mich auch nicht anfreunden. Der Kontext (HTML, Swing, ...) sollte doch durch die Klasse schon getrennt sein, oder sind diese Methoden etwa alle in der selben Klasse? Und selbst wenn, dann würde ich beim Java-Standard bleiben und die Methoden getHTMLForm(), getSwingForm() nennen...

Noch besser wäre es, wenn es eine allgemeine Schnittstelle gibt, die eine Methode getForm() definiert. Und dann machst Du zwei Implementierungen, einmal für HTML und einmal für Swing. Das wäre dann "elegante Programmierung"... ;)
 

DocMcFly

Bekanntes Mitglied
Okay, Okay okay...

überzeugt... meine Methoden heißen absofort:
Code:
public JComponent         getSwingForm();
public StringBuffer       getHTMLForm();
public StringBuffer       getXMLForm();


Dann:

Code:
Guckst du hier: [url]http://java.sun.com/j2se/1.3/docs/api/java/io/PipedOutputStream.html[/url]

...hat mir überhaupt nicht geholfen. Wenn man sich die Methoden bzw. den Konstruktor ansieht, stellt man fest: PipedOutputStream/PipedInputStream nimmt keinen einfach OutputStream an...

Ich hab mich auf das hier geeinigt:
Code:
public void     getXmlForm(OutputStream _outputStream)  throws IOException

So kann/muss der Nutzer der Bibliothek den Stream selbst wählen.

Und zum Schluß: Was habt ihr gegen die drei Methoden?
Code:
public JComponent         getSwingForm();
public StringBuffer       getHTMLForm();
public StringBuffer       getXMLForm();

Warum soll ich das ganze nochmal kapseln? Ich habe eine Bibliothek der gebe ich ein spezielles XML-File. Innerlich erzeugt die daraus ein "Object". Ich kann der Bibliothek, sagen wie ich gerne die Ausgabe hätte: Also Swing-Komponete, HTML- oder XML-Source-Code. Mehr ist da nicht...

Warum sollte ich es dem Nutzer es unnötig schwer machen? Er tut xml rein und bekommt Swing, HTML oder XML raus - Der rest verschwindet in der Blackbox.

Gruß Clemens
 

DocMcFly

Bekanntes Mitglied
Okay...

aber wie kann ich die Kapselung vorstellen? So etwa:

Ich nenne mal meine Bibliothek "lib". Ich Vermute mal so wäre es elegant: Ich biete dem Nutzer bspw. folgenden Aufruf für den HTML-Code an.

Code:
 ...
out.write(
  lib.html().getForm();
);
...
* - nur wie kann ich das machen?

Leider ist es aber so, wegen des rekursiven Durchlaufes der XML-Daten, laufen alle Outputs in einer zentralen Klasse zusammen. Da ich noch weit am Anfang bei meiner Planung bin, könnte ich noch alles überwerfen. Würde ich machen, wenn ich davon ein konkreten Nutzen hätte.

zZ ist es so zu jedem Knoten-Typ in der XML gibt es ein Äquivalent als Java-Klasse. Jede Java-Klasse kann drei Outputs produzieren. Mittels der Rekursion wird so der Output zusammen gebaut.

Soll ich dann zu jedem Knoten noch mal extra ein Rendereklasse bauen vor jedes Output? Dann verdreifacht sich ja die Klassenzahl... ist das auch elegant?

Danke für Lesen und für die bisherige Hilfe...

Clemens
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J [SWING]Elegante Java Formular Lösung? XML? Allgemeine Java-Themen 4
FoolMoon Elegante Möglichkeit die kleinste Zahl zu ermitteln. Allgemeine Java-Themen 7
K Elegante Lösung zum Manipulieren von Collections gesucht Allgemeine Java-Themen 16
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
districon Rekursion und Dynamische Programmierung Allgemeine Java-Themen 2
D Vigenere Chiffre Programmierung Allgemeine Java-Themen 5
G Thread-Programmierung Allgemeine Java-Themen 5
R Input/Output Programmierung mithilfe der Robot Bibliothek Allgemeine Java-Themen 15
MiMa Programmierung von Bibliotheksklassen Allgemeine Java-Themen 3
zhermann Grundsatzfrage zur strukturierter Programmierung Allgemeine Java-Themen 5
S Kaffemaschine Programmierung Probleme Allgemeine Java-Themen 2
P jCheckBox auf der zusammengeknüpften Programmierung anzeigen lassen Allgemeine Java-Themen 3
K Test-Frist Programmierung - wie vorgehen Allgemeine Java-Themen 5
C Programmierung von Fotoeffekten mit Java möglich? Allgemeine Java-Themen 3
J Rekursive Programmierung-Zählen von Ziffern Allgemeine Java-Themen 5
L Designfrage: Dispatcher-Programmierung - redundante Auslegung Allgemeine Java-Themen 1
E Sonderzeichen nicht setzbar: Großes Problem bei Programmierung unter Linux Mint mit Virtual Box Allgemeine Java-Themen 5
C BlackBox-Framework - Plugin Programmierung Allgemeine Java-Themen 4
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
E Socket Client-Server-Programmierung Allgemeine Java-Themen 44
M Parallele Programmierung: volatile Variable nimmt ungewöhnlichen Wert an Allgemeine Java-Themen 3
C Open Soure Projekte für parallele Programmierung Allgemeine Java-Themen 6
E Thread Programmierung Allgemeine Java-Themen 2
K Multithread Programmierung...ExecutionCompletionService Allgemeine Java-Themen 7
E objektorientierte Programmierung Allgemeine Java-Themen 3
C Hilfe bei Adressbuch-Programmierung, wie am Besten mit JList implementieren Allgemeine Java-Themen 2
J Problem mit der Thread Programmierung Allgemeine Java-Themen 2
T Fehler bei der Programmierung eines Universaldienstbrowsers Allgemeine Java-Themen 3
J 3d-Programmierung Allgemeine Java-Themen 7
S BlueJ BlueJ - Geldautomat-Programmierung Allgemeine Java-Themen 2
G Funktionale Programmierung, OO- Programmierung, ... Allgemeine Java-Themen 9
J Hardware Programmierung Allgemeine Java-Themen 3
Kr0e Atomic / Lockfree Programmierung Allgemeine Java-Themen 11
6 Java - Threads - parallele Programmierung - Tutorial Allgemeine Java-Themen 6
I parallele Programmierung mit Java Allgemeine Java-Themen 3
X Error bei der Programmierung eines Sortieralgorithmus Allgemeine Java-Themen 2
J Modul/Komponenten/Addon-Programmierung Allgemeine Java-Themen 3
ModellbahnerTT Dynamische Programmierung, komme nicht weiter.... Allgemeine Java-Themen 15
S Applet Programmierung in Eclipse Allgemeine Java-Themen 12
B Observer vs Listener (GUI-Programmierung) Allgemeine Java-Themen 5
Developer_X Batch Programmierung Allgemeine Java-Themen 4
Developer_X Datei Programmierung Allgemeine Java-Themen 18
hdi Suche nach Begriff aus der Programmierung Allgemeine Java-Themen 11
K Programmierung einer Hilfe Allgemeine Java-Themen 6
G Threads programmierung Allgemeine Java-Themen 7
F Frage zu JSP / Java Programmierung Allgemeine Java-Themen 2
L Brauche Hilfe bei Memory Programmierung Allgemeine Java-Themen 2
G Framework für Multi-Prozessor-Programmierung? Allgemeine Java-Themen 4
tomtailor Mobiltelefon - Programmierung Allgemeine Java-Themen 8
O Oberfläche und "richtige" Programmierung Allgemeine Java-Themen 8
ven000m Constraint Programmierung Allgemeine Java-Themen 6
X Langsames Java im Bereich der GUI-Programmierung Allgemeine Java-Themen 8
F Klausuraufgaben Java-Programmierung Allgemeine Java-Themen 10
G Software für Java programmierung Allgemeine Java-Themen 5
J Frage zu Objektorientierter Programmierung Allgemeine Java-Themen 9
K Bubblesort Programmierung, finde Fehler nicht . Allgemeine Java-Themen 25
bernd Hardwarenahe Programmierung Allgemeine Java-Themen 14
S Taschenrechner und Programmierung Allgemeine Java-Themen 4
D Fraen zur Programmierung einer Volltextsuche Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben