2009-04-20 7 views
2

eine Datenstruktur annehmen Person für eine Kontaktdatenbank verwendet. Die Felder der Struktur sollten konfigurierbar sein, damit Benutzer der Struktur benutzerdefinierte Felder hinzufügen und sogar vorhandene Felder ändern können. Also im Grunde sollte es eine Konfigurationsdatei sein wieBenutzer-einstellbare Datenstrukturen

FieldNo FieldName   DataType   DefaultValue 
0  Name    String    "" 
1  Age    Integer   "0" 
... 

Das Programm sollte dann diese Datei laden, verwaltet die dynamische Datenstruktur (dynamisch nicht in einer „Veränderung während der Laufzeit“ Art und Weise, aber in einem „Benutzer kann über die Konfiguration ändern Datei "Weg") und ermöglichen einen einfachen und typsicheren Zugriff auf die Datenfelder.

Ich habe dies bereits implementiert, Informationen über jedes Datenfeld in einem statischen Array speichern und nur die geänderten Werte in den Objekten speichern.

Meine Frage: Gibt es ein Muster, das diese Situation beschreibt? Ich denke, dass ich nicht der erste bin, der auf das Problem eingeht, eine vom Benutzer einstellbare Klasse zu erstellen?

Vielen Dank im Voraus. Sag mir, wenn die Frage nicht klar genug ist.

+0

Definitiv nicht der erste, der das fragt. Ich glaube Ruby on Rails lässt Sie Datenbankschemata über Konfigurationsdateien anpassen. – Artelius

+0

Ich muss Delphi verwenden und ich verwende keine externe Datenbank. Was ich will, ist eine vom Benutzer einstellbare Delphi-Klasse (oder zumindest etwas, das sich ähnlich verhält) – jpfollenius

Antwort

5

Ich hatte einen kurzen Blick durch "Muster der Enterprise Application Architecture" von Martin Folwer und die Metadata Mapping Muster beschreibt (auf den ersten Blick), was Sie beschreiben.

Ein Auszug ...

„A Metadata Mapping ermöglicht es Entwicklern, die Zuordnungen in einer einfachen Tabellenform zu definieren, die dann bygeneric Code verarbeitet werden können, um die Details des Lesens durchzuführen, das Einfügen und die Aktualisierung Daten."

HTH

+0

Danke für diese großartige Antwort! Leider ist die Musterbeschreibung auf Martin Fowlers Wegseite sehr kurz und ich bin nicht im Besitz seines Buches. Gibt es freie und detailliertere Beschreibungen dieses Musters? – jpfollenius

+0

Natürlich könnten Sie auch nur das Buch kaufen. Es wird die Investition wert sein. –

+0

@Nazar: Ich schicke dir eine Nachricht. Vielen Dank für dieses sehr schöne Angebot! Ich werde erwägen, das Buch zu kaufen, wenn ich es hilfreich finde. – jpfollenius

0

Der normale Weg, um dies zu behandeln ist, dass die Klasse eine Liste von benutzerdefinierten Datensätzen hat, von denen jeder aus einer Liste von benutzerdefinierten Feldern besteht. Die Konfigurationsinformationen können einfach in einer Datenbanktabelle gespeichert werden, die eine Typ-ID, einen Feldtyp usw. enthält. Die eigentlichen Daten werden dann in einer einfachen Tabelle gespeichert, wobei die Daten nur als (Objectid + Feldindex)/Stringpaare - Sie dargestellt werden Konvertieren Sie die Zeichenfolgen in und aus dem echten Typ, wenn Sie die Datenbank lesen oder schreiben.

+0

So sieht meine Implementierung im Moment aus. Ich war interessiert, ob es gemeinsame, elegantere Lösungen gibt. – jpfollenius

3

Ich schlage vor, an dem verschiedenen Object-Relational-Muster in Martin Fowlers Patterns of Enterprise Application Architecture verfügbar here suchen. Dies ist eine Liste von Mustern, die hier behandelt werden.

Die beste Anpassung an Ihr Problem scheint die Zuordnung von Metadaten here zu sein. Es gibt andere Muster, Mapper, etc.

+0

+1 das gleiche gilt für dich: gute Antwort! – jpfollenius