Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: [Tutorial] Singletons in Delphi

  Alt 30. Jan 2010, 16:42
Ich finde das Tutorial gut, aber besser wäre es, wenn es sich noch an die Styleguidelines bezüglich Nomenklatur halten würde.
Felder beginnen mit 'f', keine 'ungarische Notation' bzw. Verklausulierung des Datentyps, und Underscores sollten vermieden werden.

Zum Google-Video fällt mir nur ein, das es natürlich wichtig ist, auf die Gefahren hinzuweisen, die sich hinter solchen Praktiken verbergen, aber man muss schon die richtigen Schlüsse daraus ziehen.
Die Dogmen der 'modernen' Softwareentwicklung sind wirklich sinnvoll:
1. Globale Variablen sind böse. Mein Programm ist eine globale Variable, ebenso alle Formulare und Datenmodule.
2. Goto's sind böse. Mein Programm besteht letztendlich aus (fast) nichts anderem.
3. Singletons sind böse. Neben dem Programm verzichte ich damit auf Caches, Dictionaries, Logger, Drucker, Festplatten und Bildschirme etc.. Oh, und letztendlich auf den User.

Also ich weiss nicht. Ich LIEBE es, gegen Dogmen zu verstoßen. Und verdiene mein Geld damit. Allerdings auch nur deshalb, weil ich nicht inflatorisch gegen Dogmen verstoße.

Ach so, bei jedem Argument gehört ein und ein dahinter,

Zurück zum Tutorial: Ich würde folgenden Gegenvorschlag machen:
Delphi-Quellcode:
unit SingletonUnit;
interface
type
  TSingleton = class
  protected
  // Verbergen der dem Singleton-Prinzip widersprechenden Methoden, so kann man dann nicht mal 'aus Versehen'
  // ein Singleton freigeben.
    constructor Create;
    destructor Destroy;
    procedure Free;
  public
  // Es ist nur das sichtbar, was das Singleton kann
    procedure PublicMethod();
  end;

// Automatische 'Lazy initialization'
function Singleton: TSingleton;

implementation
var
  SingletonInstance: TSingleton;

function Singleton: TSingleton;
begin
  if SingletonInstance = nil then
    SingletonInstance := TSingleton.Create;
  Result := SingletonInstance;
end;

{ TSingleton }

constructor TSingleton.Create;
begin
  inherited;
end;

destructor TSingleton.Destroy;
begin
  inherited;
end;

procedure TSingleton.Free;
begin
  inherited Free;
end;

procedure TSingleton.PublicMethod;
begin
  // Do Something;
end;

initialization
  SingletonInstance := nil;
finalization
  SingletonInstance.Free;
end.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat