AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt automatisch erzeugen

Ein Thema von SyntaxXx · begonnen am 20. Jun 2015 · letzter Beitrag vom 20. Jun 2015
Antwort Antwort
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#1

Objekt automatisch erzeugen

  Alt 20. Jun 2015, 07:53
Guten Tag zusammen,
ich habe eine Unit ohne Form, die diverse Methoden bereitstellen soll.
In mehreren dieser Methoden brauche ich immer wieder mal ein TSQLConnection Objekt

Nun habe ich also im privaten Teil der Unit eine Variable von diesem Typen deklariert.
Allerdings kann ich diese dort nicht initialisieren.
Ich finde es unschön, das in jeder Methode zu machen, wo ich das Objekt brauche.

Ich suche also nach einer Möglichkeit, beim laden dieser Unit automatisch ein TSQLConnection Objekt zu erzeugen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Objekt automatisch erzeugen

  Alt 20. Jun 2015, 07:56
Entweder im initialization Abschnitt oder man verwendet ein DataModule
Markus Kinzler
  Mit Zitat antworten Zitat
Aviator

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

AW: Objekt automatisch erzeugen

  Alt 20. Jun 2015, 10:56
Wenn du das in einer Klasse machst, dann schreib doch den Create Aufruf des Objektes in den Constructor der Klasse.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: Objekt automatisch erzeugen

  Alt 20. Jun 2015, 11:18
Abgesehen davon ist das ein klassisches Beispiel für das Singleton-Pattern. Das Initialisieren verpackst du in eine statische Methode (zB. getInstance) die entweder die vorhandene Instanz zurückgibt oder eben eine neue erstellt.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Objekt automatisch erzeugen

  Alt 20. Jun 2015, 11:26
Objekt automatisch erzeugen
Ich verstehe den Titel anders als den Text darunter. Den Titel verstehe ich so, dass du in einer Unit ein Objekt nutzen willst und fragst wo du es erzeugen kannst.

Sollte ich dich richtig verstanden haben, hier ein Beispiel in dem ein TStringList Objekt erzeugt wird.
Delphi-Quellcode:
unit Unit2;

interface

uses
  Classes;

  procedure TestAddStrings(s: String);

implementation

var
  sl: TStringList;

procedure TestAddStrings(s: String);
begin
  sl.Add(s)
end;

initialization
  sl := TStringList.Create;

finalization
  sl.Free;

end.
//EDIT:

Ups, sehe gerade, dass mkinzler es auch schon erwähnt hat.

Geändert von Popov (20. Jun 2015 um 11:30 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Objekt automatisch erzeugen

  Alt 20. Jun 2015, 12:04
Abgesehen davon ist das ein klassisches Beispiel für das Singleton-Pattern.
Und das ist i.A. keine gute Idee, so ein Singleton. Jedenfalls sagt das der Software-Ästhet.
Aber hier würde ich das auch in Erwägung ziehen (weil man sonst die ganze SW umbauen müsste). Allerdings findet der TE es blöd, die Connection immer explizit zu erzeugen.

Ich würde mir ja eine Klasse bauen, die meine Verbindungen verwaltet. So könnte ich beliebig viele Connections erzeugen (z.B. um in Threads Daten parallel zu laden oder mit unterschiedlichen Datenbanken zu arbeiten etc.).

Delphi-Quellcode:
TConnectionManager = class
Public
  Function GetConnection : IConnection;
  Procedure Release (aConnection : IConnection);
End;

...
  myConnection := connectionManager.GetConnection;
  Try
    ...
  Finally
     connectionManager.Release(myConnection);
  end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:47 Uhr.
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