Benerator zu DATAMIMIC Migrationsleitfaden¶
Dieser Leitfaden bietet detaillierte Anweisungen und Beispiele, um Dir bei der Migration von Benerator zu DATAMIMIC zu helfen. Er enthält einen umfassenden Vergleich von unterstützten Elementen, Attributen, Generatoren und Konvertern, zusammen mit Vorschlägen für manuelle Migration und Python-Scripting-Alternativen.
Benerator und DATAMIMIC Vergleich¶
Unten findest Du eine detaillierte Analyse und einen Vergleich des Benerator-Modells mit dem DATAMIMIC-Modell.
Von DATAMIMIC unterstützte Elemente und Attribute¶
Entfernte Elemente:
<bean/>
<setting/>
-> ersetze durch variable<property/>
-> ersetze durch variable<pre-parse-generate/>
<domtree/>
<run-task/>
<defaultComponents/>
<comment/>
-> ersetze durch echo<error/>
<beep/>
<dbsanity/>
<iterate/>
-> ersetze durch generate<attribute/>
-> ersetze durch key<part/>
-> ersetze durch nestedKey<id/>
-> ersetze durch key<consumer/>
<evaluate/>
<import/>
<execute/>
Entfernte Attribute:
consumer="Preview"
- das passiert automatischconsumer="Result"
consumer="NoConsumer"
- entferne einfach das Ziel und es wird nicht exportiertconsumer
-> ersetze durch targettype in generate and iterate
-> ersetze durch namesubSelector
-> kann durchselector
ersetzt werdenacceptUnknownTypes
defaultScript
defaultErrorHandler
defaultImports
generatorFactory
maxCount
defaultNull
defaultTimeZone
-> keine sofortige NotwendigkeitdefaultPageSize
defaultOneToOne
defaultSourceScripted
Benutzerdefinierte Jars:
- Noch nicht unterstützt. Wir arbeiten an einem Prototyp mit GraalPy und GraalVM, um dies in Zukunft zu ermöglichen.
JDBC-Metadatenanalyse:
- Entfernt, wir verwenden SQL Alchemy für Datenbankverbindungen. Zusätzlich werden wir mehr datenbankbezogene Komfortfunktionen in unserer DATAMIMIC UI bereitstellen.
Skriptunterstützung¶
- JS / BEN Skriptunterstützung entfernt.
dynamicSource -> Source
(nur) und es gibt ein boolesches AttributsourceScripted
, das so in variable, key und nestedKey verwendet werden kann:Skriptgesteuerte Daten müssen von geschweiften Klammern umgeben sein, wie hier1
<variable name="people" source="data/people.wgt.ent.csv" sourceScripted="True" cyclic="True"/>
1,Steve,{48+11},15
.- Endzustand von
<variable/>
im globalen Kontext -> Speicherung dynamischer Werte muss durch Datenbankabfragen/Dateicaches/usw. gehandhabt werden.
Zugriff auf Komponenten und Variablen¶
-
Zugriff auf Root-Ebene: Wenn Du Schlüssel oder Variablen auf der Root-Ebene innerhalb eines Skriptattributs ansprichst, muss der erste Generate-Knoten nicht erwähnt werden. Zum Beispiel, um eine Variable oder einen Schlüssel direkt auf der Root-Ebene zu erreichen:
1
<generate script="variableOrKeyInRootLvl"/>
-
Zugriff auf verschachtelte Ebene: Wenn die Variable oder der Schlüssel innerhalb einer verschachtelten Struktur liegt, wie zum Beispiel einem anderen Generate-Knoten oder einem NestedKey-Knoten auf Ebene 2, muss der Name des verschachtelten Knotens vorangestellt werden. Zum Beispiel, um auf eine Variable oder einen Schlüssel in der zweiten Ebene zuzugreifen:
1
<generate script="nestedKeyOrGenerateName.variableOrKeyInNestedLvl2"/>
Beispiele mit bereitgestelltem Modell¶
Angenommen, das folgende Modell liegt vor:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Und Entity und Gewichtungsdaten als:
data/accidents.ent.csv | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 |
|
data/active.wgt.csv | |
---|---|
1 2 3 |
|
-
Beispiel für Zugriff auf Root-Ebene: Um auf den Schlüssel
name
auf der Root-Ebene zuzugreifen:1
<generate script="name"/>
-
Beispiele für Zugriff auf verschachtelte Ebene:
- Um auf den Schlüssel
car
innerhalb desnotes
nestedKey zuzugreifen:1
<generate script="notes.pet"/>
- Um auf den Schlüssel
color
innerhalb descars
nestedKey zuzugreifen:1
<generate script="cars.color"/>
- Um auf den Schlüssel
repair_required
innerhalb desaccidents
nestedKey innerhalb voncars
zuzugreifen:1
<generate script="cars.accidents.repair_required"/>
- Um auf den Schlüssel
name
innerhalb desfamily
nestedKey zuzugreifen:1
<generate script="family.name"/>
Vorteile im Vergleich zu Benerator¶
-
Klarer Zugriff auf Komponenten: Die Struktur des DATAMIMIC-Modells bietet eine klare und konsistente Möglichkeit, auf Komponenten und Variablen zuzugreifen. Bei Benerator kann der Zugriff auf Komponenten, insbesondere bei kaskadierenden Generate- und Iterate-Knoten, verwirrend und fehleranfällig sein. DATAMIMIC vereinfacht dies durch eine einfache Namenskonvention für verschachtelte Ebenen, was die Lesbarkeit und Wartbarkeit verbessert.
-
Strukturierte Navigation: Mit DATAMIMIC ist die Struktur intuitiver. Komponenten auf der Root-Ebene werden direkt angesprochen, während verschachtelte Komponenten durch Voranstellen der Namen ihrer Elternknoten angesprochen werden. Dies beseitigt die Mehrdeutigkeit, die bei Benerator beim Umgang mit komplexen verschachtelten Strukturen auftritt.
-
Verbesserte Lesbarkeit: Die explizite Benennung von verschachtelten Ebenen in DATAMIMIC-Skripten macht den Code leichter lesbar und verständlich. Dies reduziert die kognitive Belastung für Entwickler und minimiert die Wahrscheinlichkeit von Fehlern beim Zugriff auf tief verschachtelte Variablen.
-
Konsistenz: DATAMIMIC erzwingt eine konsistente Methode zum Zugriff auf Variablen und Schlüssel, unabhängig davon, ob sie sich auf der Root-Ebene befinden oder innerhalb mehr