2010-11-10 15 views
1

J'ai deux tables de base de données. Une table stocke des données pour un commitment dont un superviseur est responsable. L'autre est une table de correspondance disponible programs La clé primaire program est une clé étrangère dans le tableau commitment (un engagement est contre un programme particulier financé).Modèle d'application web Java - doit-il contenir un attribut qui contient les choix pour une clé étrangère?

J'ai deux objets Javabean qui représentent ces tables, je pense qu'ils s'appellent DTO ?? Maintenant, dans ma vue jsp (pour éditer ou insérer un engagement), je ne veux pas que les utilisateurs voient ou doivent entrer la clé primaire du programme, mais plutôt ils préfèrent utiliser un select Tirez vers le bas pour afficher le nom du programme résolu avec l'ID fk comme valeur de l'option de sélection.

Ma question est: Dois-je être passé deux attributs dans la demande - « engagement » qui représente le record d'une seule ligne dans la base de cet engagement spécifique (si l'édition) et la programList une liste des prgrams disponibles que j'itérer sur pour afficher dans un pull down ?? Ou devrais-je modifier mon engagement DTO et lui faire avoir un attribut qui peut stocker une liste de programmes disponibles (en tant que DTO de programme) de sorte que je devrais seulement passer dans le DTO commitment dans un attribut de demande à mon vue?

Répondre

0

Votre première approche est plus auto-documentée. Un engagement est lié à un programme spécifique et non à plusieurs programmes. Avoir un List<Program> dans Commitment est donc déroutant pour les autres (et aussi pour vous-même lorsque vous regardez en arrière un an plus tard). Cela dit, si le List<Program> est à l'échelle de l'application (lire: c'est toujours la même liste pour chaque utilisateur/session), je le placerais simplement dans la portée de l'application plutôt que dans la portée de la demande.

+0

jamais pensé à la portée de l'application. Je devrais ajouter qu'un utilisateur pourrait ajouter à la liste des programmes sur un autre écran. La liste est la même pour tous les utilisateurs, mais elle est dynamique et peut changer, mais pas très souvent. Est-ce que cela pourrait affecter la portée de l'application? – jeff

+0

Il suffit de modifier la liste dans la portée de l'application. Ce sera reflété dans toute l'application. – BalusC

+0

J'ai accepté cette réponse en me basant sur le point de documentation de BalusC. Je suis d'accord, ça ne boue pas les eaux. – jeff