2009-07-22 9 views
0

Pour les interfaces graphiques qui affichent de nombreux champs de base de données, il est souhaitable d'avoir un champ: étiquette de libellé afin que les étiquettes de l'interface graphique ne soient pas codées en dur, mais définies dynamiquement. Par exempleComment mappez-vous les étiquettes GUI aux champs de base de données?

  • hauteur: "Hauteur (cm)"
  • âge: "Âge en années"
  • bloodAlcPct: "Blood Alcohol%"
  • monthsIncarcerated: "mois en prison"

Où stockez-vous ces chaînes et comment sont-elles mappées aux champs de base de données? Vous pouvez supposer que les utilisateurs demandent des changements fréquents à ces étiquettes.

Répondre

1

Vous pouvez utiliser une table méta contenant des informations sur les champs de la table. Vous trouverez toujours plus d'utilisations pour cette table une fois que vous l'avez.

+1

Cela n'impliquerait-il pas une quantité importante d'interrogation supplémentaire? – Glenn

+0

Selon les cas d'utilisation, vous pouvez simplement charger les listes dans une classe/structure avec une seule requête au démarrage et être fait avec elle. Habituellement, vos étiquettes ne changeront pas si souvent, n'est-ce pas? – Mostlyharmless

1

Je ne stocker ces données dans votre base de données, mais plutôt les ai cartographié dans votre modèle OO qui représente la table de base de données comme cela se fait dans toutes les bonnes ORM (regarder django, kohana-ORM, activerecord etc.)

EDIT:

Bien ... cela dépend de ce que vous appelez codé en dur. Le codage dur se réfère généralement à quand vous l'avez dans le code chaque fois que vous utilisez le champ dans un formulaire ou une sortie. Dans la classe ORM, elle est définie une seule fois et réutilisée à partir de ce moment. Vous pouvez également utiliser la méthode _get si vous souhaitez utiliser des langues différentes.

Vous devez définir l'étiquette à un endroit. Je trouve que cela crée trop de frais généraux si vous mettez dans la base de données puisque vous devez récupérer les informations de la base de données. Selon le type d'interface graphique que vous utilisez peut-être beaucoup de fois. En fin de compte, vous avez deux choses à équilibrer: performance, lisibilité et extensibilité du code. L'encapsuler dans une classe le rend propre à partir des deux perspectives, sauf dans le cas où l'étiquette est modifiée par les utilisateurs, alors ce sont des données dynamiques et devraient être dans la base de données.

Quoi qu'il en soit, c'est souvent une question de situation particulière et de goût personnel. Par conséquent, il n'y a pas de bonne ou de mauvaise solution ici.

+0

Voulez-vous dire coder en dur les étiquettes dans les fichiers de classe? – Glenn

+0

Alors ... le modèle OO qui représente la table de la base de données ... si vous y stockez les étiquettes, ce serait encore difficile à coder ... non? (Je n'en ai jamais utilisé auparavant, donc je ne suis pas sûr.) Ergo, je dois demander.) – Mostlyharmless

+0

Comme je le dis dans mon édition, si vous le définissez une fois dans la classe et que vous vous y conformez DRY (Ne vous répétez pas) il n'est pas vraiment codé en dur, sauf qu'il y a une raison pour laquelle il doit être changé périodiquement (même multi-langue peut être fait avec _get dans ce cas). – txwikinger