AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem mit Klassendesign

Ein Thema von jus · begonnen am 31. Jan 2017 · letzter Beitrag vom 8. Feb 2017
Antwort Antwort
Seite 1 von 2  1 2   
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Problem mit Klassendesign

  Alt 31. Jan 2017, 14:48
Genau so.
Markus Kinzler
  Mit Zitat antworten Zitat
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#2

AW: Problem mit Klassendesign

  Alt 31. Jan 2017, 14:59
Sieht doch schon gut aus. Es fehlen nur virtual und override an den entsprechenden Methoden, damit auch die abgeleiteten Versionen benutzt werden.
Sebastian
Das kann ja wohl nicht var sein!
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
440 Beiträge
 
#3

AW: Problem mit Klassendesign

  Alt 31. Jan 2017, 15:10
Die eingestreuten "abstract"s ersparen einem leere Methoden-Hülsen zu erzeugen.
Delphi-Quellcode:
type
  TDatabase = class abstract
  public
    procedure ConnectDB(host,user,pw: String); virtual; abstract;
    procedure SelectDB(DBName:String); virtual; abstract;
    procedure SQLQuery(Query:String; var Cols:TCols; var Rows:TRows); virtual; abstract;
  end;

  TMySQL = class(TDatabase)
  public
    procedure ConnectDB(host,user,pw: String); override;
    procedure SelectDB(DBName:String); override;
    procedure SQLQuery(Query:String; var Cols:TCols; var Rows:TRows); override;
  end;

  TMySQLPhpTunnel = class(TDatabase)
  public
    procedure ConnectDB(host,user,pw: String); override;
    procedure SelectDB(DBName:String); override;
    procedure SQLQuery(Query:String; var Cols:TCols; var Rows:TRows); override;
  end;
  
implementation

procedure ZeigeInGui(SQL: TDatabase); //<----- wichtig ist hier!
var
  i,j: Integer;
begin
  SQL.SQLQuery('SELECT * FROM TestTabelle');
  for i:=0 to High(Rows[0])
    for j:=0 to High(Rows) do StringGrid1.Cells[i,j] rows[i,j]; //nur exemplarisch
end;
  Mit Zitat antworten Zitat
Noocode

Registriert seit: 31. Jan 2017
1 Beiträge
 
#4

AW: Problem mit Klassendesign

  Alt 31. Jan 2017, 16:54
Ich persönlich möchte als weiteren Vorschlag das Entwurfsmuster Factory einbringen.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.458 Beiträge
 
Delphi 12 Athens
 
#5

AW: Problem mit Klassendesign

  Alt 31. Jan 2017, 15:02
Hallöle...
oder über ein Interface. Sinngemäß: Der Code arbeitet mit dem Interface. Welche "Klasse" das Interface "interpretiert" ist dem Code wurscht...
Eigentlich ein Klassiker wie man es verwendet wenn verschiedene DBMS Verwendung finden.

Geändert von haentschman (31. Jan 2017 um 15:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Problem mit Klassendesign

  Alt 1. Feb 2017, 12:27
Sinngemäß: Der Code arbeitet mit dem Interface. Welche "Klasse" das Interface "interpretiert" ist dem Code wurscht...
Eigentlich ein Klassiker wie man es verwendet wenn verschiedene DBMS Verwendung finden.
das hört sich interessant an, aber wie macht man das in der Praxis?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.911 Beiträge
 
Delphi 12 Athens
 
#7

AW: Problem mit Klassendesign

  Alt 1. Feb 2017, 12:37
das hört sich interessant an, aber wie macht man das in der Praxis?
Das sieht in der Deklaration ähnlich aus. Man hat nur keine Vererbung und kann auch ganz andere Objekte verwenden, solange diese nur das Interface IDatabase implementieren:
Delphi-Quellcode:
type
  IDatabase = interface
  ['{74C42FE6-FDBD-477E-A74E-CC5841CC8A30}']
    procedure ConnectDB(host,user,pw: String);
    procedure SelectDB(DBName:String); virtual;
    procedure SQLQuery(Query:String; var Cols:TCols; var Rows:TRows);
  end;

  TMySQL = class(TInterfacedObject, IDatabase)
  public
    procedure ConnectDB(host,user,pw: String);
    procedure SelectDB(DBName:String);
    procedure SQLQuery(Query:String; var Cols:TCols; var Rows:TRows);
  end;

  TMySQLPhpTunnel = class(TInterfacedObject, IDatabase)
  public
    procedure ConnectDB(host,user,pw: String);
    procedure SelectDB(DBName:String);
    procedure SQLQuery(Query:String; var Cols:TCols; var Rows:TRows);
  end;
  
implementation

procedure ZeigeInGui(SQL: IDatabase); //<----- wichtig ist hier!
var
  i,j: Integer;
begin
  SQL.SQLQuery('SELECT * FROM TestTabelle');
  for i:=0 to High(Rows[0])
    for j:=0 to High(Rows) do StringGrid1.Cells[i,j] rows[i,j]; //nur exemplarisch
end;
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
350 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Problem mit Klassendesign

  Alt 2. Feb 2017, 23:08
Die eingestreuten "abstract"s ersparen einem leere Methoden-Hülsen zu erzeugen.
Delphi-Quellcode:
type
  TDatabase = class abstract
  public
    procedure ConnectDB(host,user,pw: String); virtual; abstract;
    procedure SelectDB(DBName:String); virtual; abstract;
    procedure SQLQuery(Query:String; var Cols:TCols; var Rows:TRows); virtual; abstract;
  end;

  TMySQL = class(TDatabase)
  public
    procedure ConnectDB(host,user,pw: String); override;
    procedure SelectDB(DBName:String); override;
    procedure SQLQuery(Query:String; var Cols:TCols; var Rows:TRows); override;
  end;

  TMySQLPhpTunnel = class(TDatabase)
  public
    procedure ConnectDB(host,user,pw: String); override;
    procedure SelectDB(DBName:String); override;
    procedure SQLQuery(Query:String; var Cols:TCols; var Rows:TRows); override;
  end;
  
implementation

procedure ZeigeInGui(SQL: TDatabase); //<----- wichtig ist hier!
var
  i,j: Integer;
begin
  SQL.SQLQuery('SELECT * FROM TestTabelle');
  for i:=0 to High(Rows[0])
    for j:=0 to High(Rows) do StringGrid1.Cells[i,j] rows[i,j]; //nur exemplarisch
end;
Das Beispiel von samso hat schon mal auf Anhieb funktioniert. Vielen Dank für Eure Mühen! Das mit den Interfaces muß ich mir in Ruhe mal anschauen.

Lg,
jus
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Problem mit Klassendesign

  Alt 3. Feb 2017, 07:56
@TBx
Danke! Ich hatte ein eigenes Interface für jede DB erwartet. Werde mir das mal bei Gelegenheit anschauen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Problem mit Klassendesign

  Alt 3. Feb 2017, 08:36
@TBx
Danke! Ich hatte ein eigenes Interface für jede DB erwartet. Werde mir das mal bei Gelegenheit anschauen.

Gruß
K-H
Das würde ja gerade den Sinn von Interfaces zerstören. Hier geht es ja gerade darum, dass du immer mit dem gleichen Interface und den gleichen Methoden arbeitest. Lediglich bei der Erstellung der Interface Instanz wird dann entweder TMySql oder TMySqlPhpTunnel erstellt. Das wiederum kann dann später eine Factory erledigen. Wobei ich das auch noch nicht gemacht habe und da bei mir auch noch ein paar Verständnisprobleme vorliegen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz