Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Record im Array nutzen? - Sinnvollere Wege? (https://www.delphipraxis.net/185842-record-im-array-nutzen-sinnvollere-wege.html)

Sir Rufo 11. Jul 2015 12:20

AW: Record im Array nutzen? - Sinnvollere Wege?
 
Die Persistenz-Schicht sollte aber nicht im Objekt selber sein.

Das gibt nachher einfach nur Kuddelmuddel, wenn man das Datenformat ändert/ändern muss (Umstieg von Dateien auf eine Datenbank).

Der Anwendung selber sollte es egal sein, wo die Daten abgelegt werden. Es gibt einfach einen Service, dem die Anwendung mitteilt, was mit dem Objekt passieren soll (CRUD). Der Service kümmert sich dann darum, wo diese Daten konkret abgelegt werden.

Der Aufwand ist nicht wirklich mehr als diese Verquickung, aber ungemein flexibel.

Asura 11. Jul 2015 13:07

AW: Record im Array nutzen? - Sinnvollere Wege?
 
Wie könnte ich dann diese Persistenz-Schicht nach außen verlagern?
Und wie stelle ich da diese Informationen so bereit, dass dieser Service egal ist, ob diese in einer Datenbank oder File gespeichert werden?

Also wäre es ratsamer, wenn ich das Programm komplett neu überarbeite und nicht unbedingt nun ein Record nehme? Oder kann ich für meine Dimension des Programmes ruhig beim Record bleiben?

Namenloser 11. Jul 2015 14:26

AW: Record im Array nutzen? - Sinnvollere Wege?
 
@Sir Rufo: Das ist ja alles schön und gut, aber lass doch erst mal die Kirche im Dorf. Es macht keinen Sinn, jemandem, dem noch die Grundlagen der Objektorientierung fehlen, solche Konstrukte hinzuklatschen. Das führt nur zu Verwirrung. Von 0 auf 100 geht nun mal nicht sofort.

@Asura: Beim record lassen – kannst du zwar zur Not, bringt dich aber auch nicht weiter. Ich würde dir eher raten, dich einfach mal mit den Grundlagen objektorientierter Programmierung (Was ist eine Klasse? Was ist ein Objekt? Wann muss ich ein Objekt erzeugen und freigeben? Was ist Kapselung, Vererbung, Polymorphie?) zu befassen. Dann nutze dieses Wissen, um aus dem record eine Klasse und aus dem Array eine ObjectList zu machen. Dabei würde ich es dann auch erst mal belassen. In ein paar Jahren kannst du dich dann mit dem beschäftigen, was Sir Rufo geschrieben hat ;)

Asura 18. Jul 2015 19:23

AW: Record im Array nutzen? - Sinnvollere Wege?
 
Guten Tag,
und zwar habe ich mich nun an der Klasse und an der Objectlist versucht:
Meine Klasse "Employee" hat die Properties, wie von Sir Rufo bereits vorgeschlagen.
Ich habe dann die Objectliste erstellt "OLEmployees".
Meine vorgehensweise sieht wie folgt aus:
Ich speichere in die Properties die Inhalte der Textfelder. Danach adde ich der Objectliste die Klasse Employee als neues Item dazu.

Die Initialisierungen und das Freigeben lasse ich hiermal weg, die finden in der Haupt-Unit im OnCreate und OnClose Event statt.

Delphi-Quellcode:
procedure TF_AddEditEmployee.btn_AddEditClick(Sender: TObject);
var EmployeeData: TStringlist;

begin

  EmployeeData := TStringlist.Create;

  EmployeeData.Add(edt_CardID.Text);
  EmployeeData.Add(edt_PreName.Text);
  EmployeeData.Add(edt_SurName.Text);
  EmployeeData.Add(DatetoStr(dt_Birthday.Date));
  EmployeeData.Add(edt_WorkStation.Text);
  EmployeeData.Add(edt_Position.Text);


      F_Employees.SelCardID := StrtoInt(edt_CardID.Text);

      try
        AddEmployeeData(F_Main.OLEmployees.Count, EmployeeData);

      except
        Messagebox(Self.Handle, 'Mitarbeiter konnte nicht hinzugefügt werden', 'Fehler',
                   MB_ICONWARNING or MB_OK);
      end;

      close;

  EmployeeData.Free;

end;

Delphi-Quellcode:
// *************************** Mitarbeiterhinzufügen ***************************

procedure AddEmployeeData(Index: Integer; EmployeeData: TStringlist);
begin

  F_Main.Employee.CardID     := StrtoInt(EmployeeData[0]);
  F_Main.Employee.Prename    := EmployeeData[1];
  F_Main.Employee.Surname    := EmployeeData[2];
  F_Main.Employee.Birthday   := StrtoDate(EmployeeData[3]);
  F_Main.Employee.Workstation := EmployeeData[4];
  F_Main.Employee.Position   := EmployeeData[5];

  F_Main.OLEmployees.Add(F_Main.Employee); // Employee Daten werden als neuer Eintrag gespeichert

end;
Meine Frage ist nun, ist das so richtig und wie kann ich nun wieder aus der Objectliste heraus das richtige Item finden? Ich kann ja schlecht IndexOf benutzen, da ja alle Items das gleiche Object (Employee) haben nur mit anderen Properties.
Zurzeit wäre ja jedes neue Item der Objectlist ein neuer Mitarbeiter mit den Eigenschaften von Employee.

Dalai 18. Jul 2015 19:44

AW: Record im Array nutzen? - Sinnvollere Wege?
 
@Asura: Warum dieser Umweg über die Stringliste?

MfG Dalai

p80286 19. Jul 2015 10:22

AW: Record im Array nutzen? - Sinnvollere Wege?
 
Zitat:

Zitat von Asura (Beitrag 1309137)
Meine Frage ist nun, ist das so richtig und wie kann ich nun wieder aus der Objectliste heraus das richtige Item finden?

Na, so wie man es immer macht, nach property sortieren und dann suchen!?

Alternativ kann man auch entsprechende Indizes erstellen und über die dann den Zugriff steuern.

Gruß
K-H

Asura 19. Jul 2015 11:16

AW: Record im Array nutzen? - Sinnvollere Wege?
 
@Dalai:

Ich dachte mir für jede Property ein Parameter zu nehmen, wo ich den Inhalt eines Editfeldes übermittle ist unschön.
Oder gibt es eine andere Methode?

@p80286:

Muss ich mir dafür eine Funktion schreiben, oder wie kann ich nach der Property suchen?

Dejan Vu 19. Jul 2015 11:19

AW: Record im Array nutzen? - Sinnvollere Wege?
 
Zitat:

Zitat von p80286 (Beitrag 1309152)
Zitat:

Zitat von Asura (Beitrag 1309137)
Meine Frage ist nun, ist das so richtig und wie kann ich nun wieder aus der Objectliste heraus das richtige Item finden?

Na, so wie man es immer macht, nach property sortieren und dann suchen!?

Immer?
1x suchen: Linear durchsuchen.
öfter suchen: Dictionary.
Sortieren und dann suchen? Ich jedenfalls nie.

Dalai 19. Jul 2015 12:03

AW: Record im Array nutzen? - Sinnvollere Wege?
 
Zitat:

Zitat von Asura (Beitrag 1309158)
@Dalai:

Ich dachte mir für jede Property ein Parameter zu nehmen, wo ich den Inhalt eines Editfeldes übermittle ist unschön.
Oder gibt es eine andere Methode?

Ich würde das Objekt erzeugen, dann befüllen und dann der Liste hinzufügen. Wenn man mal die Klasse TEmployee von Sir Rufo als Vorlage nimmt, würdest du ein solches Objekt (statt der Stringliste) erzeugen, dessen Eigenschaften setzen (statt die Strings in die Stringliste zu packen) und das entstandene Objekt in die Liste einfügen (statt die Stringliste zu übergeben). Ich hoffe, die Beschreibung ist auch ohne Code verständlich, momentan hab ich weder Zeit noch Lust (vor allem bei der Wärme), mich auch geistig irgendwie anzustrengen... :stupid:

MfG Dalai

Asura 19. Jul 2015 12:26

AW: Record im Array nutzen? - Sinnvollere Wege?
 
@Dalai:

Ich habe es glaube ich aber trotzdem verstanden. Im Prinzip überspringst du einfach die Parameterübergabe von der einen Unit zur anderen und fügst gleich die Inhalte den Eigenschaften von dem Objekt Employee und fügst das dann der Objektliste zu.

Ich frage mich aber wie ich die Funktion Equals der Klasse TEmployee von Sir Rufo nutzen kann, könnte man mir da eventuell ein Beispiel geben?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz