Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   OOP Grundsatzfrage Klasse TKunde (https://www.delphipraxis.net/125039-oop-grundsatzfrage-klasse-tkunde.html)

khh 29. Nov 2008 17:02


OOP Grundsatzfrage Klasse TKunde
 
Hallo zusammen,

ich habe eine Klasse Kunde, die alles erledigt, was mit dem Kunden an sich zu tun hat.
Also speichern in DB, ändern in DB, zugehörige Plausibilitätsprüfungen usw.
Jetzt habe ich eine DB-Tabelle "Nummernkreise" in der diverse Nummernkreise definiert sind.
In dieser hole ich die letzte kdnr und setze diese,nach dem Speichern des Kunden auch dort entsprechend hoch.
Jetz bin ich mir nicht sicher, unter Berücksichtigung irgendwelcher Grundsätze zur OOP, ob ich diese "Arbeit", also das Holen und Speichern des Kd-Nummernkreises die Klasse erledigen lassen soll, oder dies auserhalb der Klasse erledige.
Oder ist das eigentlich schnurzegal.


Danke für eure Meinungen.



Gruss KH

mkinzler 29. Nov 2008 17:05

Re: OOP Grundsatzfrage Klasse TKunde
 
Gibt es auch andere Nummernkreise?

khh 29. Nov 2008 17:08

Re: OOP Grundsatzfrage Klasse TKunde
 
Zitat:

Zitat von mkinzler
Gibt es auch andere Nummernkreise?

ja, diese sind alle in der Tabelle nummernkreise.

DeddyH 29. Nov 2008 17:14

Re: OOP Grundsatzfrage Klasse TKunde
 
Gibt es denn auch eine Nummernkreis-Klasse? Wenn ja, gehört m.E.n. eine Referenz davon in die Kundenklasse, die Nummerkreisverwaltung wird dann von diesem Objekt übernommen.

sx2008 29. Nov 2008 20:52

Re: OOP Grundsatzfrage Klasse TKunde
 
Zitat:

Zitat von khh
ich habe eine Klasse Kunde, die alles erledigt, was mit dem Kunden an sich zu tun hat.
Also speichern in DB, ändern in DB, zugehörige Plausibilitätsprüfungen usw.

Das ist zuviel Arbeit für eine Klasse.
Eine Klasse soll ein eng umrissenes Aufgabengebiet bearbeiten.
Zuviel in einer Klasse wäre ein Antipattern (God-Object).
Du kannst z.B. die Plausiprüfungen in eine eigene Klasse auslagern:
Delphi-Quellcode:
TCustomerPlausi = class(TPersistent)
private
  FCustomer : TCustomer;
  procedure PlausiCheckA;
  procedure PlausiCheckB;
  ..
public
  constructor Create(ACustomer:TCustomer);
  procedure DoAllChecks;
end;
Dadurch, dass die Klasse TCustomerPlausi im Konstruktor ein TCustomer-Objekt übergeben bekommt,
kann es die Plausiprüfungen durchführen.
Das lohnt aber erst dann, wenn die Plausiprüfungen recht umfangreich werden.

Ob eine Klasse einen Job selber erledigt oder an eine andere Klasse delegiert,
ist immer abhängig von der jeweiligen Aufgabenstellung.

Was man aber auf jeden Fall sagen kann, ist dass du eine Klasse für die Nummernkreise benötigst.
Ein Objekt von TNummernkreis ist dann in deiner Kundenklasse eingebettet.

khh 29. Nov 2008 21:22

Re: OOP Grundsatzfrage Klasse TKunde
 
Zitat:

Zitat von sx2008
Dadurch, dass die Klasse TCustomerPlausi im Konstruktor ein TCustomer-Objekt übergeben bekommt,
kann es die Plausiprüfungen durchführen.
Das lohnt aber erst dann, wenn die Plausiprüfungen recht umfangreich werden.

Ob eine Klasse einen Job selber erledigt oder an eine andere Klasse delegiert,
ist immer abhängig von der jeweiligen Aufgabenstellung.

Was man aber auf jeden Fall sagen kann, ist dass du eine Klasse für die Nummernkreise benötigst.
Ein Objekt von TNummernkreis ist dann in deiner Kundenklasse eingebettet.

ok, also eine eigene Klasse für die Nummernkreise.
und die Klasse für die Plausibilitätsprüfungen ist nur für die klasse TKunden.

Gönnt Ihr eigentlich jeder Klasse eine eigene Datei, oder fasst Ihr mehrere Klassen in einem File zusammen ?


Gruss Kh

mkinzler 30. Nov 2008 10:13

Re: OOP Grundsatzfrage Klasse TKunde
 
Ich würde so großzügig sein

khh 1. Dez 2008 13:13

Re: OOP Grundsatzfrage Klasse TKunde
 
hallo zusammen,
also ich habe jetzt eine Klasse:

TCustomerPlausi = class(TPersistent)
private
FCustomer : TCustomer;
procedure PlausiCheckA;
procedure PlausiCheckB;
..
public
constructor Create(ACustomer:TCustomer);
procedure DoAllChecks;
end;

der Tcustomer hat eine property
die public so deklariert ist:

property plz: string read Fplz write Fplz;

wen ich jetzt in der procedure PlausiCkeckA auf die property plz mit
xy := TCustomer.PLZ ; zugreife bekomme ich eine meldung:

Error: Only class methods can be referred with class references.


Wie funktioniert das richtig,was mache ich falsch, wie komme ich an die property?


danek gruss KH

DeddyH 1. Dez 2008 13:15

Re: OOP Grundsatzfrage Klasse TKunde
 
Bitte künftig die Delphi-Tags benutzen. Und ändere mal
Zitat:

Delphi-Quellcode:
xy := TCustomer.PLZ ;

in
Delphi-Quellcode:
xy := FCustomer.PLZ ;

khh 1. Dez 2008 13:17

Re: OOP Grundsatzfrage Klasse TKunde
 
Zitat:

Zitat von DeddyH
Bitte künftig die Delphi-Tags benutzen. Und ändere mal
Zitat:

Delphi-Quellcode:
xy := TCustomer.PLZ ;

in
Delphi-Quellcode:
xy := FCustomer.PLZ ;


das hatte ich erst so versucht, da bekomme ich aber eine exception :-(


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 Uhr.
Seite 1 von 2  1 2      

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