AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Brauche Ideen für flexiblen/modularen Programmteil

Brauche Ideen für flexiblen/modularen Programmteil

Ein Thema von Jumpy · begonnen am 27. Jan 2012 · letzter Beitrag vom 31. Jan 2012
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#11

AW: Brauche Ideen für flexiblen/modularen Programmteil

  Alt 27. Jan 2012, 17:28
Delphi-Quellcode:
TDatenSammlerClass = class of TDatenSammler;

TDatenSammler = class
public
  procedure LoadFromFile(const AFilename: String); virtual; abstract;
  procedure SaveToTable(const ATable: TTable); virtual; abstract;
end;

TCSVImporter = class(TDatenSammler)
public
  procedure LoadFromFile(const AFilename: String); override;
  procedure SaveToTable(const ATable: TTable); override;
end;

// #1 für weitere Formate - dementsprechende Klasse implementieren (von TDatenSammler ableiten)

(...)

implementation

type
  TDatenSammlerExtAssoc = record
    Ext: String;
    _Class: TDatenSammlerClass;
  end;

const
  DatenSammlerExtAssoc: Array[0..{anzahl der Datenformate - 1}] of TDatenSammlerExtAssoc = ((Ext: '.csv'; _Class: TCSVImporter), {...});

// #2 Wichtig: hier ^ registrieren

function GetDatenSammlerClassFromExt(const AExt: String): TDatenSammlerClass;
var
  i: Integer;
begin
  for i := 0 to High(DatenSammlerExtAssoc) do
    with DatenSammlerExtAssoc[i] do
      if Ext = AExt then
      begin
        Result := _Class;
        break;
      end;
end;

{...später im Programm}
var
  ldr: TDatenSammler;
begin
  ldr := GetDatenSammlerClassFromExt(ExtractFileExt(Filename)).Create;
  ldr.LoadFromFile(Filename);
  ldr.SaveToTable(MyTable);
  ldr.Free;
end;
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (27. Jan 2012 um 17:37 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#12

AW: Brauche Ideen für flexiblen/modularen Programmteil

  Alt 29. Jan 2012, 11:13
Was Du da bauen sollst, nennt sich ETL-Prozess. Googel mal danach, es gibt auch einige Freeware ETL Tools. benetl z.B. ist für mysql und postgres. Schau dir die mal an, vielleicht bekommst Du Denkanstöße.

Wie DeddyH schon erwähnt hat, ist das ein gutes Beispiel für den sinnvollen Einsatz eines Interfaces.

Geändert von Furtbichler (29. Jan 2012 um 11:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Brauche Ideen für flexiblen/modularen Programmteil

  Alt 29. Jan 2012, 13:20
Jede der genannten Datenquellen kann quasi direkt in ein DataSet überführet werden.
Code:
............ Orcacle DB -> ??? -> DataSet
............ Orcacle DB -> ADO -> DataSet
.................. LDAP -> ADO -> DataSet
...... lokale CSV-Datei -> ADO -> DataSet
FTP -> lokale CSV-Datei -> ADO -> DataSet
Dieses wäre dann der Extract-Teil, der Rest sollte dann eigentlich Spaziergang sein
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.056 Beiträge
 
Delphi 2010 Enterprise
 
#14

AW: Brauche Ideen für flexiblen/modularen Programmteil

  Alt 29. Jan 2012, 19:33
Was Du da bauen sollst, nennt sich ETL-Prozess. Googel mal danach, es gibt auch einige Freeware ETL Tools. benetl z.B. ist für mysql und postgres. Schau dir die mal an, vielleicht bekommst Du Denkanstöße.

Wie DeddyH schon erwähnt hat, ist das ein gutes Beispiel für den sinnvollen Einsatz eines Interfaces.
Apropos ETL und Oracle:
Wenn Du hier über Prozesse sprichst, die große Datenmengen bewegen und Oracle als Ziel fix ist, denk doch noch mal darüber nach, ob sich eine direkte Durchführung der Ladeprozesse in Oracle nicht lohnen würde.
Dein Programm würde sie dann nur starten.

Ohne Oracle zu hypen: sobald der Prozess nativ auf dem Zielsystem (welches auch immer), also mehr oder weniger mit Bordmitteln oder hauseigenen Tools durchgeführt wird, hast Du maximale Performance und vermutlich auch Robustheit.
Gruß, Jo
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.717 Beiträge
 
Delphi 6 Enterprise
 
#15

AW: Brauche Ideen für flexiblen/modularen Programmteil

  Alt 31. Jan 2012, 12:02
@all:
Erstmal danke für die rege Beteiligung. Komme wg. WE erst jetzt zum Antorten. Und das auch nur kurz, weil ich eure Anregungen/Links erstmal nur überflogen habe und mir das alles nochmal gründlich durchlesen will.

@jobo & Furtbichler:
ETL als Stichwort für den Vorgang ist sehr passend und ähnlich. Nur was die Datenmenge usw. angeht, wird das bei mir glaub ich nur der "kleine Bruder" von ETL
(z.Zt. vllt. 2000 Datensätze aus allen momentanen Quellen (4), recht einheitliche Struktur, nur im kleinen müssen Formatanpassungen vorgenommen werden)

@Aphton:
Ich hab noch nicht alle Details deines Beispiels verstanden, aber das sieht schon sehr interessant aus. So wie ich die Konstruktion verstanden habe, kann ich über einen String (der wer weiß voher kommen kann, z.B. Parameter) festlegen, welche Klasse ich jetzt brauche.
Wenn ich ein Datensammlerklasse mehrmals brauchen will müsste ich dann in dem Teil "später im Programm" sowas einbauen, wie "if GetDatenSammlerClassFromExt('blub') is nil then GetDatenSammlerClassFromExt('blub').Create"
Sprich wenn erstmalig gebraucht, neu erzeugen, sonst wiederverwenden?
Ralph

Geändert von Jumpy (31. Jan 2012 um 12:06 Uhr)
  Mit Zitat antworten Zitat
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 10:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf