API - Methodennamen...

miasma

Aktives Mitglied
Hallo,

ich wollte mal ein paar Methodennamen eines versionierten, baumbasierten storage-systems oder frameworks usw. diskutieren:

https://github.com/JohannesLichtenb...src/main/java/org/sirix/api/INodeReadTrx.java
https://github.com/JohannesLichtenb...rc/main/java/org/sirix/api/INodeWriteTrx.java

Ich hoffe die Javadoc Kommentare sind einigermaßen selbsterklärend. Insbesondere in INodeWriteTrx würde ich die modifikations-operationen gerne abkürzen, bspw. insertLeftElement(QName) statt insertElementAsLeftSibling(QName), aber bin mir nicht ganz sicher. Für die Rückgabe von getValue() und getQName() (letzteres will ich wahrscheinlich in getName()) umbenennen würde sich auch Google Guava's Optional-Klasse anbieten, weil ansonsten je nach Knotentyp "null" zurückgegeben wird und ich NPEs vermeiden will. Im Fall von equals, was sicher oft verwendet wird, bspw.

"foobar".equals(trx.getValue()) kann man aber eine NPE auch so vermeiden. Generell würde ich dann die API sobald wie möglich erstmal soweit "finalisieren" (Erweiterbarkeit soll halt nur gegeben sein), so dass eventuelle Nutzer sich darauf verlassen können.

Viele Grüße,
Johannes
 

Marco13

Top Contributor
Geht es wirklich nur um die Namen? Der Unterschied zwischen
insertLeftElement
und
insertElementAsLeftSibling
ist praktisch der gleiche wie zwischen
insertL + CTRL+SPACE
und
insertE + CTRL+SPACE
(jeweils +/- ein paamal die Cursortasten)

Ohne auch nur den HAUCH einer Ahnung davon zu haben, worum es dabei geht, sahen die Methoden beim Überfliegen recht repetitiv aus... Aber man hat unglaublich viele Möglichkeiten für Abstufungen

wtx.insertElementAsLeftSibling("foo");
wtx.insertLeftElement("foo");
wtx.insertElement("foo", LEFT);
wtx.insertLeft(new Element("foo"));
wtx.insert(new Element("foo"), LEFT);
wtx.insert().element("foo").left();
...

Vielleicht hat ja irgendjemand eine genauere Vorstellung, was damit gemacht wird, und kann konkretere Tipps geben.
 

miasma

Aktives Mitglied
Also generell handelt es sich mehr oder weniger um Cursor mit Transaktionssemantik die man durch den Baum bewegen kann (entweder nur lesend (N-Cursor) oder schreibend (momentan nur ein Cursor).

Bspw. https://github.com/JohannesLichtenberger/sirix/wiki/Simple-usage..

Da habe ich bisher nur mal ein paar Schnipsel zusammengestellt wie man sich das vorstellen kann, mehr oder weniger wie ein (nach commiten persistentem versionierten DOM) und auf das XDM (XPath/XQuery Data Model) ausgelegt. Ich denke da lässt sich sowieso so ziemlich jede Baumstruktur drauf mappen, wie bspw. von JSON.

BTW: Die Methoden mit dem Knoten als Parameter entfallen, die soll man nur mittels einer write-transaction (cursor der die Semantik einer read-transaction um Modifikationsoperationen erweitert) einfügen/ändern/verschieben können. Ansonsten nur durch copy von einem anderen Baum einfügen.

Letzendlich kann man snapshots des Baumes immer wieder commiten, was intern durch (page-)deltas abgespeichert wird (bzw. verschiedene Revisionierungsverfahren) und man soll in Zukunft in der Lage sein einfach durch verschiedene Versionen/Revisionen navigieren können.
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben