Skip to content

Commit 6cd7242

Browse files
committed
minor,
readme (german) added
1 parent 512b442 commit 6cd7242

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
2+
Tests gibt es noch nicht, ich denke mein Ansatz dient erst mal der Orientierung und Diskussion.
3+
4+
Die Definitiondatei war ürsprünglich nicht systematisch erstellt, sondern hat sich aus den Anforderungen ergeben, die ich ad hoc beim Verwenden von Jsonix ergeben haben. Dazu hatte ich mir ursprünglich den Context rekursiv (begrenzt auf eine gewisse Tiefe) als JSON.stringify ausgeben lassen und dann bearbeitet, was natürlich nicht so gut die Class-Hierarchie trifft.
5+
6+
Da ich kein professionelles UML-Tool besitze (und schon gar keins, was TS erzeugt, falls es so etwas überhaupt gibt), bin ich auf Java ausgewichen.
7+
Die Klassen, die in Java erzeugt werden "ähneln" den Design-Pattern von TS, so dass man Ende mit ein paar regulären Ausrücken, den Code umwandeln kann (zu den Interfaces komme ich später. Man könnte das natürlich auch via xmi lösen, das fände ich zum gegenwärtigen Zeitpunkt aber etwas übertrieben.
8+
9+
Die Klassenhierarchie aus
10+
11+
https://github.com/duschata/jsonix/blob/issue_%23139/typescript/src/main/resources/diagram.svg
12+
13+
war dann Grundlage meines Mappings auf die d.ts (ist mit intelliJ erzeugt).
14+
15+
Die Erzeugung der d.ts ging so weit ganz gut von der Hand, allerdings sehe ich im Diagram noch eine Reihe von nicht zugeordneten Klassen, da müsstest du mir vielleicht noch mal ein paar Beziehungen einzeichnen. Es sind in der d.ts noch nicht alle Typen zu Literalen terminiert, einige Definitionen enden daher noch mit Object, {} oder any, das Ganze ist also noch in progess...
16+
17+
Soweit die d.ts, bei einer vollständigen Migration zu TS sehe ich aber vor allen Dingen folgende Probleme:
18+
Du benutzt in vielen Klassen mehrfach- bzw. prototypische-Vererbung. Das kann man in der d.ts gut über Interfaces abbilden (wie ich es auch gemacht habe), TS selbst unterstützt aber keine Mehrfachvererbung, so dass man an den Stellen in denen Mehrfachvererbung ein Rolle spielt auf das Strategy-Pattern (oder Delegation) ausweichen könnte.
19+
In der Java Uml habe ich einfach Interfaces benutzt, was nicht ganz korrekt ist, aber ja nur der Übersicht dienen soll.
20+
21+
In TS und plain-JS, was d.ts benutzt gibt es keinen wirklich funktionierende instanceof Implementierung. Das generierte JS weiß quasi nichts von den Klassen, die in TS definiert sind. Der Code "weiß", wenn er eine TypeInfo verarbeitet nicht, ob es nicht vielleicht eine ClassInfo ist. Jsonix benutzt hier in jeder Klasse ein CLASS_NAME Feld, das konnte ich in die Interfaces nicht aufnehmen, da sie keinen Initializer besitzten dürfen (das Problem sollte aber erledigt sein, wenn man Klassen definiert, die ein CLASS_NAME Feld besitzen können).
22+
23+
24+
25+
26+
27+
28+
29+
30+
31+
32+
33+
34+
35+
36+

typescript/src/main/typescript/Jsonix.d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ declare module Jsonix {
126126

127127

128128
// private
129-
typeInfos: ClassInfo[];
129+
elementInfos: ClassInfo[];
130130

131131
}
132132
}
@@ -202,7 +202,7 @@ interface AbstractElementPropertyInfo extends PropertyInfo {
202202
* @extends {AbstractElementPropertyInfo}
203203
*/
204204
interface ElementPropertyInfo extends AbstractElementPropertyInfo {
205-
typeInfo: ClassInfo;
205+
typeInfo: ClassInfo | string;
206206
elementName: QName;
207207
}
208208

@@ -232,7 +232,7 @@ interface ClassInfo extends TypeInfo, Styled {
232232
defaultElementNamespaceURI: string,
233233
defaultAttributeNamespaceURI: string
234234
built: boolean,
235-
//TODO confirm this syntax
235+
//TODO: confirm this syntax
236236
propertyInfoCreators: {
237237
aa: { aa };
238238
anyAttribute: { aa },

0 commit comments

Comments
 (0)