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.