AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Dependency Injection vs Service Locator -- dynamisches Erzeugung von Objekten
Thema durchsuchen
Ansicht
Themen-Optionen

Dependency Injection vs Service Locator -- dynamisches Erzeugung von Objekten

Ein Thema von s.h.a.r.k · begonnen am 1. Aug 2012 · letzter Beitrag vom 5. Aug 2012
 
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Dependency Injection vs Service Locator -- dynamisches Erzeugung von Objekten

  Alt 1. Aug 2012, 15:47
Nun muss ich doch nochmals mein Thema aufgreifen und um Rat fragen. Ich sitze glaub irgendwie auf dem Schlauch und habe echt keine Ahnung, wie ich das Problem mittel Dependecy Injection lösen kann. Ich habe mal zwei Beispiele:
  • Ich habe eine Logger-Instanz, die mehrere Log-Writer bedienen kann. Log-Writer können z.B. in die Console Logs schreiben, in eine Datei oder in eine Datenbank. Wenn meine Applikation startet werden, je nach Konfiguration verschiedene Log-Writer erzeugt und dem Logger (Logger.AddWriter) übergeben. Evtl. kommen weitere Log-Writer noch während der Laufzeit hinzu -- ein Datenbank-Log-Writer kann z.B. erst dann hinzugefügt werden, wenn eine DB-Verbindung besteht.
  • Es wird eine Datenbank-Abfrage gestartet und daraus Objekte generiert. Es ist erst zur Laufzeit bekannt, wie viele Objekte es werden. Beispiel: Laden von Produkten.
So, nun habe ich einen Dependency-Container à la Spring für Delphi. Dependency Injection habe ich soweit nun auch verstanden, ebenso warum ich keinen Service Locator nutzen sollte.

Aber ich finde einfach keine sinnvolle Lösung, wie ich die obigen Probleme lösen kann. Ich komme leider immer wieder zu dem Punkt, dass ich auf den Service Locator zurückgreifen muss, um dynamisch eine beliebige Anzahl an Objekten erzeugen zu können.

Hier noch ein wenig Code, dass wir nicht nur über dieses total abstrakte Gelaber diskutieren müssen
Delphi-Quellcode:
function TUserFinder.Find(const Username: string): IList<IUser>;
var
  Query : IDbQuery;
begin
  Query := FDatabase.GetQuery();
  Query.SQL := 'SELECT * FROM Users WHERE username = :username';
  Query.Parameters.Add(':username', Username);
  Query.Open();
  try
    Result := TList<IUser>.Create();
    for each Dataset in Query.Results do
    begin
      //
      // User erzeugen ???
      //
      Result.Add(User);
    end;
  finally
    Query.Close();
  end;
end;
Oder habe ich überhaupt etwas falsch verstanden? Ich dreh mich gerade gedankelich leider nur noch im Kreis...
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
 


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 03:51 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 by Thomas Breitkreuz