Diese Attribute sind insbesondere spannend, wenn man sich aus der
DB-Struktur komplette Quellcodes erzeugen lässt. Dann fügt man die Attribute hinzu, um später dynamisch auf allen erzeugten Klassen zugreifen zu können, ohne dass man diese alle untereinander verlinken muss.
Delphi-Quellcode:
type
/// <summary>
/// Definitionen für das DB-Schema [inject]
/// </summary>
[DefineSchema('
inject', '
{12543F95-68E1-4F42-BA5D-479AFBBA12E1}')]
TSchemaInject =
class(TSchemaDefinition)
public
type
/// <summary>
/// Definitionen für die DB-SProc [inject].[Base_Login_Write]
/// </summary>
[DefineStoredProc(TSchemaInject, '
Base_Login_Write')]
TSProcBase_Login_Write =
class(TStoredProcDefinition)
public
...
Später kann man im Code diese Klassen alle wieder auffinden und nutzen:
Delphi-Quellcode:
Ctx := TRttiContext.Create;
try
for Typ in Ctx.GetTypes do
begin
if Typ.TypeKind <> tkClass then
Continue;
// load schemata
if not Typ.AsInstance.MetaclassType.InheritsFrom(TSchemaDefinition) then
Continue;
for Attr in Typ.GetAttributes do
begin
if not (Attr is DefineSchemaAttribute) then
Continue;
FKnownSchemata.Add(TSchemaDefinitionClass(Typ.AsInstance.MetaclassType));
Break;
end;
end;
finally
Ctx.Free;
end;
Aus meiner Sicht eine der besten Neuerungen in der Delphi-Language seit langer Zeit (zusammen mit den Generics)
...
...