Einzelnen Beitrag anzeigen

norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#3

AW: Anfängerfragen zu Klassenaufbau

  Alt 5. Nov 2017, 08:23
Hallo mensch72,

zuerst muss ich vielleicht dazu sagen, dass manche Dinge in dem Projekt, an dem ich mitarbeite, schon gegegen sind. Dazu gehört die Struktur bis runter zu THardware. Im Moment ist dann aber alles was man Hardwareinformationen braucht, in eine riesiges, flaches THardware-Element gepackt. Jetzt wollten wir eigene Elemente für jedes Messgerät erstellen.

so tiefer Direktzugriff ist nie gut... und hier auch noch logisch falsch weil du kein Element von deiner "Hardwarelist" ausgewält hast!?
statt "Test.Testplan.Hardware.HardwareList[?].GetHardwarePower.Name" besser so allgemeines per Property in Hardware sicher lösen, wo es zur Vorabfrage auch einen Count gibt.

also
"if Test.Testplan.Hardware.HardwareList.Count>0 then Caption:=Test.Testplan.Hardware.HardwareList[0].Name"
Grundsätzlich hatte und habe ich auch meine Probleme mit diesen tiefen Verschachtelungen. Aber nach vielen Diskussionen mit unseren C#-Kollegen und nachdem dieses Projekt schon so begonnen wurde, suchen wir einen Weg, um das fortzusetzen.

In deiner Änderung liegt glaube ich ein Missverständnis vor. Die HardwareList kann diverse Messgeräte enthalten. z.B. eins für die Leistungsmessung, eins für die Geschwindigkeits- und Wegmessung, ... Deshalb greife ich nicht über HardwareList[0].Name auf ein Element zu, sondern lasse mir das passende Element über die Funktionen in THardwareList (GetHardwarePower, GetHardware,Speed, ...) ermitteln.

Rein logisch sehe ich mit aktuellen Angaben auch noch keinen Grund für Test->Testplan.. ausser es kann/soll mal innerhalb eines Tests mehrere Testpläne geben?
Test enthält das Testprotokoll.
Testplan: Enthält enthält was mit welcher Toleranz und welchem Messmittel zu testen ist
Test: Ist ein abgeschlossener Test für eine Charge und enthält, mit welchem Testplan gemessen werden soll und die Messresultate

"if (Testplan.Count>0) and (Testplan[0].Hardware.Count>0) then Caption:=Testplan[0].Hardware[0].Name"
...das sähe dann für mich schon viele schöner und praktischer aus und du sparst dir die Assigned-Kette weil es ist immer bis zur Liste alles vorhanden(legt man im "contruktor" an und gibt es im "destruktor" frei), nur ob Elemente in der Liste ist per ".count" zu prüfen wenn direkt auf ein Element zugegriffen werden soll.
Daran, alle Elemente immer im Constructor anzulegen, habe ich auch schon gedacht. Da die Struktur über THardware aber Altlasten sind, ist das im Moment nur zu 99.99% so. Wenn alles richtig läuft, sind die ganzen Elemente angelegt.
Beispiel für Ausnahme: Aus irgendeinem Grund wurde eine Hardware in der Datenbank gelöscht nachdem ein Test angelegt wurde. Ganz klar, dürfte nie passieren, aber in der DB gibt es keine Constraints, die das verhindern
Bei THardware gibt es noch eine andere Einschränkung: Über TTest gibt es in Wirklichkeit noch TBatch. TBatch ist eine Liste von TTest, die durchgeführt werden sollen. Da verschiedene TTest mit der gleichen THardware arbeiten könnten, wird THardware nicht in jedem TTest created sondern liegt in einer THardwareList. Bei gleicher THardware zeigen also zwei TTest auf das gleichen THardware-Elemente. Da habe ich dann schon mehr Skrupel, in der THardwareListe ein Leerdummy zu erstellen.


Grüße
Gerd
  Mit Zitat antworten Zitat