DataObjects vereinfachen Arrays!?

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

DataObjects vereinfachen Arrays!?

Beitrag von Manfred » Do, 16. Aug 2018 12:57

Dataobjects machen Arrays lesbarer, ohne Zweifel. Aber gibt es hierzu einfacherere Lösungen, oder muß das wirklich so umgesetzt werden?

So sieht mein Array aus und kann sehr viele Zeilen enthalten

Code: Alles auswählen

AAdd(::aStrukturErweitert,{"wert1","a",1,0,"Static","Br-Uschrift","n","","TOOLTIP","",0})
AAdd(::aStrukturErweitert,{"wert2","a",1,0,"Static","Br-Uschrift","n","","TOOLTIP","",0})
Wenn ich das jetzt mit DataObjects lösen würde, dann würde es ja pro Zeile so aussehen:

Code: Alles auswählen

doArray:spalte1 := "wert1"
doArray:spalte2 := "a"
doArray:spalte3 := 1
doArray:spalte4 := 0
doArray:spalte5 := "Static"
doArray:spalte6 := "Br-Uschrift"
doArray:spalte7 := "n"
doArray:spalte8 := ""
doArray:spalte9 := "Tooltip"
doArray:spalte10 := ""
doArray:spalte11 := 0
AAdd(::aStrukturErweitert,doArray:copy())

doArray:spalte1 := "wert2"
doArray:spalte2 := "a"
doArray:spalte3 := 1
doArray:spalte4 := 0
doArray:spalte5 := "Static"
doArray:spalte6 := "Br-Uschrift"
doArray:spalte7 := "n"
doArray:spalte8 := ""
doArray:spalte9 := "Tooltip"
doArray:spalte10 := ""
doArray:spalte11 := 0
AAdd(::aStrukturErweitert,doArray:copy())
Wenn wir jetzt von 20-30 Zeilen bisher sprechen, dann werden es in Zulunft einige 100 werden. Ist das wirklich so, oder kennt jemand einen Trick das zu verkürzen?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7290
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: DataObjects verinfachen Arrays!?

Beitrag von Tom » Do, 16. Aug 2018 13:00

Das ist kein sinnvoller Anwendungsfall für DataObjects.
Herzlich,
Tom

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DataObjects vereinfachen Arrays!?

Beitrag von Manfred » Do, 16. Aug 2018 13:07

das war kurz und knapp, aber warum nicht? macht das Array doch sehr gut lesbar.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13083
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: DataObjects verinfachen Arrays!?

Beitrag von Jan » Do, 16. Aug 2018 13:17

Manfred,

wenn man sowas macht, dann stimme ich Dir durchaus zu. Ich habe Anwendungen, wo die Zeilenanzahl des Quellcodes sich sehr vergrößert hat durch den Umstieg auf DataObjects. Das ist dann der Nachteil. Der Vorteil ist aber: Überall da, wo ich die anspreche, ist das massiv übersichtlicher, verständlicher, lesbarer geworden.

Und in vielen Fällen würde das ja auch nicht unbedingt so aussehen. Bei mir speichere ich z. B. in manchen DO jetzt mehr Daten als früher. Weil ich früher mir einfach die Felder rausgezogen habe die ich wirklich brauchte, und die Werte dann in den Arraysatz geschrieben habe. Heute mache ich da einfach ein SCATTER NAME oDataObject drauf, habe mit der einen Zeile alle Felder drin. Wen störts? Ich bin damit sogar für die Zukunft besser drauf - sollten sich da mal die Felder ändern, das DO stimmt immer ohne weitere Anpassungen. Die muß ich nur bei den Auswertungen machen, wie bislang auch. Aber beim Einlesen nicht mehr.

Was bei DO natürlich genial ist ist die als Transportobjekt zu nutzen. Mit einer enifachen Funktion kann man die mal eben in ein JSON- oder XML-String wandeln. Was habe ich früher in FOR-NEXT-Schleifen geackert, um alle Elemente der Arrays sauber wegzuschreiben. Heute eine Zeile Code, fertig. Andersrum natürlich auch. Ich habe ja eine Anwendung, die massiv Daten per REST austauscht. Früher habe ellenlangen Code geschrieben, um die empfangenen XML in für mich auswertbare Datenstrukturen umzusetzen (ja, ich hätte mir da natürlich auch mal selber was schreiben können ...). Heute habe ich das auf JSON umgestellt, bau da ein JSON2Var() rein, und habe sofort ein total sauber und schnell zu verarbeitendes Objekt mit allen erforderlichen Daten. Da habe ich dann hunderte Zeilen Code eingespart. Mit XML geht das per XML2Var() natürlich auch. Aber ich wollte ansich schon immer JSON verwenden, hat Alaska nur nie unterstützt. und da die jetzt JSON haben und die passenden Konvertierungsfunktionen, hab ich das gleich mit gemacht.

Manchmal muß man die Arbeitsweise etwas anpassen, wenn man auf DO umsteigt. Und manchmal ist man mit normalen Arrays etc. auch einfach besser bedient. Ein Allheilmittel sind die nicht.

Wobei sich mir die Frage stellt ob es sich für mich lohnen würde, ein Array auf DO umzustellen nur um die MemVars dann Saplte1, Spalte2, ... zu nennen. An Übersichtlichkeit habe ich da nicht wirklich etwas gewonnen. Außer das sollte bei Dir nur exemplarisch für irgendwelche sprechenden Bezeichnungen sein.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DataObjects vereinfachen Arrays!?

Beitrag von Manfred » Do, 16. Aug 2018 13:22

Au Jan,
natürlich nenne ich die nicht spalte1 usw. es war hier nur als Beispiel gedacht. Mir ging es um die große Anzahl der Zeilen darzustellen und da war ich zu faul jedesmal entsprechende Namen zu vergeben.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13083
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: DataObjects vereinfachen Arrays!?

Beitrag von Jan » Do, 16. Aug 2018 13:28

Manfred,

hatte ich mir schon so gedacht. Deswegen die Bemerkung dazu.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DataObjects vereinfachen Arrays!?

Beitrag von Manfred » Do, 16. Aug 2018 13:53

ich weiß, jetzt werde ich evtl. gesteinigt. Aber ich glaube ich habe eine Idee.

im übertragenen Sinne sollte das die SAche extrem verkürzen

Code: Alles auswählen

AAdd(::aIndex,{"ID" ,"Str(id,8,0)","ID"         ,.F.,"",.F.} )
AAdd(::aIndex,{"BEZ","Upper(bez)" ,"Bezeichnung",.F.,"",.F.} )

nLaenge := Len(::aIndex)
for nI := 1 TO nLaenge
     doArray:tag := :.aIndex[ni][1]
     doArray:key := ::aIndex[nI][2]
     doArray:name := ::aIndex[nI][3]
     doArray:par1 := ::aIndex[nI][4]
     doArray:text := ::aIndex[nI][5]
     doArray:par2 := ::aIndex[nI][6]
     aAdd(::aIndex2,doArray:copy())
next
Das Array kann bleiben man fügt nur die Schleife an um die Daten daraus zu lesen und ins DO einzufügen. Habe ich gerade mal probiert, scheint zu klappen. Also nur 1x ein Paket zeilen dazu und feddisch. Müßte jetzt nur noch ein wenig angepaßt werden.....
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13083
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: DataObjects vereinfachen Arrays!?

Beitrag von Jan » Do, 16. Aug 2018 13:57

Manfred,

ja klar geht das. Aber was hast Du damit gewonnen? Du hast ja immer noch das unübersichtliche Array als Grundlage. Das würde doch höchstens für eine Übergangszeit helfen, wenn von einem zum anderen System gewechselt werden soll. Oder versteh ich da was falsch in Deiner Arbeitsweise?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13083
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: DataObjects vereinfachen Arrays!?

Beitrag von Jan » Do, 16. Aug 2018 14:01

Achso, der Gedanke kam mir gerade: Ich erinnere mich immer noch sehr lebhaft eine Diskussion mit Martin vor vielen Jahren in unserer XUG um Arrayoperatoren. Und genau das kann man natürlich auch mit Arrays machen. Ob ich jetzt einen Wert mit oObject:vorname anspreche, oder mit oObject[1], ist vollkommen egal. Manchmal ist das ganz sinnvoll, wenn man universeller arbeiten möchte und die MemVar-Namen nicht kennt. Die kann man zwar per :classDescribe() auch auslesen, aber manchmal geht das halt auch noch kürzer.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DataObjects vereinfachen Arrays!?

Beitrag von Manfred » Do, 16. Aug 2018 14:06

Ja, das dient nur der Demonstration. Das DO wird später genutzt wegen der Namen und das Array ist nur temporär als Template da, weil das m.E. schneller befüllt wird von hand. Vielleicht geht das ja noch eleganter, aber man erspart sich auf jeden FAll Len(array)-1 x DO Namen an Zeilen und das kann eine ordentliche Menge sein.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13083
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: DataObjects vereinfachen Arrays!?

Beitrag von Jan » Do, 16. Aug 2018 14:14

Wenn Du das so machst könntest Du Dir eventuell sogar noch andere Arbeiten sparen. Wenn Du die letzte Zeile in der Schleife nicht auf ::aIndex2 machst, sondern auf ::aIndex1. Dann kannst Du überall da, wo Du das jetzt schon ansprichst, das einfach weiter benutzen. Mit MemVar oder Aliasoperator, vollkommen egal. Dann kann das nach und nach umgebaut werden, und muß nicht alles auf ein mal gemacht werden. Weil das ja in beiden Varianten immer passt.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DataObjects vereinfachen Arrays!?

Beitrag von Manfred » Do, 16. Aug 2018 14:16

Mist, da hatte ich gerade drüber nachgedacht und im Kopf eine umständliche Lösung parat. Aber die idee mit dem direkten Tausch dürfte gut sein. =D>
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13083
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: DataObjects vereinfachen Arrays!?

Beitrag von Jan » Do, 16. Aug 2018 14:36

Das Du das :copy() erst beim Schreiben in das Array machst ist natürlich eine schnelleLösung. Macht die ganze Sache nochmal etwas kürzer. Ich mach das aber nicht so. Aus gutem Grund. Ich mach das so, das ich ein DO erstelle mit allen irgendwie benötigten MemVars. Und vor dem Füllen die Kopie ziehe (mein Schema ist dann: Original oMeinDo als original, und oMeinDoKopie als die jeweils gültige Kopie davon). Das ist mir sicherer. Wenn ich nämlich aus welchem Grund auch immer mal eine MemVar nicht neu fülle, steht da noch der Wert vom vorigen Durchlauf drin. Sehr ungut. Das dürfte in Deinem Fall nicht passieren, da Du ein vorhandenes Array mit jeweils allen gefüllten Werten durchläufst, von daher ist der kurze Weg OK. Aber das passt halt nicht immer und überall.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7290
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: DataObjects vereinfachen Arrays!?

Beitrag von Tom » Do, 16. Aug 2018 16:37

macht das Array doch sehr gut lesbar.
Du verwendest das Array aus Datenobjekten, wenn ich das richtig sehe, als simplen Ersatz für ein zweidimensionales Array. Aber nur für die leichtere Lesbarkeit kann man auch Konstanten verwenden, die im Quellcode die Ordinalpositionen der Spalten ersetzen:

Code: Alles auswählen

#define SPALTE_NAME 1
#define SPALTE_VORNAME 2

aAdd(aArray,{'Krause','Manfred'})

? aArray[Len(aArray),SPALTE_NAME] // Krause
Datenobjekte hätten da nur den Vorteil, dass Dir egal sein könnte, an welcher Stelle ggf. eine neue iVar hinzugefügt wird. Datenobjekte kann man so verwenden, aber sie sind viel mächtiger. Aber Deine Lösungen kommen mir unnötig komplizier(er als andere) vor.
Herzlich,
Tom

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DataObjects vereinfachen Arrays!?

Beitrag von Manfred » Do, 16. Aug 2018 16:49

Hi Tom,
mächtiger. Das mag sein. Aber eigentlich war ja mein Vorgehen jetzt mit ein Argument von Steffen damals, als er die dataObjects vorgeführt hat. Mit Konstanten hast Du sicherlich recht, aber irgendwie konnte ich mich nie damit anfreunden. Vor allen Dingen, weil man die nicht im Debugger usw. abfragen kann. Die Namen der DO dagegen mal eben schnell. Und wenn man sich ein Array im Objectinspektor anschaut, dann sieht man da auch nur wieder Nummern, bei DO aber die Namen. Also von da her.....
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7290
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: DataObjects vereinfachen Arrays!?

Beitrag von Tom » Do, 16. Aug 2018 16:55

Stimmt auch wieder.
Herzlich,
Tom

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13083
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: DataObjects vereinfachen Arrays!?

Beitrag von Jan » Do, 16. Aug 2018 17:02

Manfred,

genau. Ich konnte mich auch mit (eigenen) Konstanten nie anfreunden - persönliche Befindlichkeit halt. Und DO im Debugger im Object-Inspector ansehen ist eine tolle Sache. Sowas von.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DataObjects vereinfachen Arrays!?

Beitrag von Manfred » Do, 16. Aug 2018 17:54

und jetzt kommt totale Freude auf. Da ich den ganzen Kram mit meiner Datenbankklasse abbilde, ist diese Schleife nur an EINER Stelle notwendig. Also doch viiiiiiiel weniger Arbeit als ich vermutet hatte. Mal schauen, was ich jetzt dadurch noch so alles "einsparen" kann.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: DataObjects vereinfachen Arrays!?

Beitrag von brandelh » Fr, 17. Aug 2018 6:39

Wenn ich eine fixe Struktur habe, mache ich einfach eine fixe Klasse und daraus die Objekte. Das hat den Vorteil, dass die INIT alle Standardwerte setzt und ich nur die anderen Felder ausfüllen muss.
Methoden könnte man auch hinterlegen, ob das für dich passt weiß ich nicht.
Gruß
Hubert

Antworten