Für mich hängt es davon ab, wie Sie sie konsumieren möchten, ob Sie einreihig oder mit EAV arbeiten.
Die Stärke von EAV besteht darin, dass neue Daten hinzugefügt werden können, ohne die Struktur zu ändern. Dies bedeutet, dass Sie, wenn Sie einen neuen Konfigurationswert möchten, diesen einfach zur Tabelle hinzufügen und an der gewünschten Stelle im Code abrufen und der Domäne, dem Schema, der Zuordnung und den DAL-Abfragen kein neues Feld hinzufügen müssen , usw.
Der Nachteil ist, dass es nur die geringste Struktur aufweist, sodass Sie pessimistisch mit den Daten umgehen müssen. Bei jeder Verwendung eines Konfigurationswerts muss davon ausgegangen werden, dass der Wert nicht vorhanden ist oder nicht das richtige Format aufweist, und muss sich entsprechend verhalten, wenn dies nicht der Fall ist. Ein Konfigurationswert kann möglicherweise nicht in ein double, ein int oder ein char umgewandelt werden. Es kann null sein. Möglicherweise gibt es überhaupt keine Zeile für den Wert. Um dies zu umgehen, muss normalerweise ein einziger gültiger "Standard" -Wert für alle Konfigurationswerte eines bestimmten In-Code-Typs vorhanden sein ( äußerst selten; häufig ist der Standardwert für die Verwendung von Code genauso problematisch wie überhaupt keiner) oder Behalten Sie ein fest codiertes Wörterbuch mit Standardwerten bei (das sich jedes Mal ändern muss, wenn eine neue Spalte hinzugefügt wird, wodurch der Hauptvorteil des EAV-Speichers überflüssig wird).
Eine einzelne breite Reihe ist so ziemlich das Gegenteil. Sie ordnen es einer einzelnen Instanz eines Konfigurationsobjekts mit einem Feld / einer Eigenschaft für jeden vorhandenen Konfigurationswert zu. Sie wissen genau, welchen Typ diese Werte zur Kompilierungszeit haben sollten, und Sie "fallen schnell" in der DAL aus, wenn eine Konfigurationsspalte nicht vorhanden ist oder keinen Wert des richtigen Typs hat, wodurch Sie einen Ort zum Abfangen von Ausnahmen erhalten bei Problemen mit dem Abrufen der Konfiguration / der Flüssigkeitszufuhr.
Der Hauptnachteil besteht darin, dass für jeden neuen Wert eine strukturelle Änderung erforderlich ist. Neue DB-Spalte, neue Spalte in der DAL (entweder das Mapping oder die SQL-Abfragen / SPs), neue Domänenspalte, alles erforderlich, um die Verwendung ordnungsgemäß zu testen.
Die richtige Situation, in der eine von diesen verwendet wird, ist die Situation, in der die Nachteile gemindert werden. In den meisten Situationen für die Konfigurationscodierung war für mich eine einzeilige Implementierung erforderlich. Dies liegt hauptsächlich daran, dass Sie, wenn Sie einen völlig neuen Konfigurationswert einführen, der das Verhalten eines Teils Ihres Programms steuert, den Code bereits ändern müssen, um den neuen Konfigurationswert zu verwenden. Warum nicht zum Konfigurationsobjekt wechseln und den zu verwendenden Wert hinzufügen ?
Kurz gesagt, ein EAV-Schema zum Speichern der Konfiguration löst das Problem, das es zu lösen vorgibt, nicht wirklich, und die meisten Problemumgehungen für die darin enthaltenen Probleme betreffen DRY.