2015-03-15 1 views
0

Je souhaite créer une classe Movie. Maintenant, un film aura un certain nombre de genres qui lui sont assignés. Ex. Le film Avengers a des genres: Action, Aventure, Sci-Fi. Maintenant, mon application maintient une liste de tous les genres à partir de laquelle un sous-ensemble peut être attribué à un film.Modélisation d'une entité avec une propriété de collection

Ma conception de modèle existante possède une entité Movie avec une collection de la liste Genre entière. La classe Genre a simplement une propriété IsSelected pour aider à identifier le sous-ensemble de genres qui ont été assignés à un film particulier. Cela présente un avantage, car lorsque je conçois l'interface utilisateur pour créer un nouveau film, j'affiche tous les genres disponibles parmi lesquels l'utilisateur sélectionne/vérifie ceux qui sont applicables au film.

public class Movie 
{ 
    public ObservableCollection<Genre> MovieGenres { get; set; } 
} 

Cependant, je crois que celui-ci est un inconvénient de cette approche. Supposons que j'ai environ 25 liste de genres et environ 500 films, alors environ 25 x 500 objets de genre sont créés.

Pensez-vous que cela devrait être évité?

Existe-t-il une meilleure approche pour associer les genres à un objet de film, ce qui réduit le besoin de créer autant d'objets de genre et offre le même avantage d'interface utilisateur?

Ou y a-t-il une meilleure approche pour concevoir mon interface utilisateur que je peux exploiter à partir de la conception du modèle?

(Je ne suis pas utiliser un outil ORM, ni l'intention d'utiliser à l'avenir)

+1

Je ne stocke que les genres affectés à ce film sur l'objet film, et dispose d'une fonctionnalité distincte pour l'ajout de nouveaux genres. Pensez au système SE pour ajouter des tags par exemple. Si vous voulez vraiment maintenir un "montrer tous les genres et sélectionner/désélectionner des éléments", alors j'aurais une seule liste de tous les groupes et je synchroniserais les états cochés avec la liste selectedMovie.Genres d'une autre manière. :) – Rachel

Répondre

0

Votre approche est certainement pas celui recommandé pour un problème comme le vôtre.

Normalement, on définirait une propriété de référence à valeurs multiples genres dans la classe Movie, et cette propriété ne contiendrait que les genres assignés à un film spécifique.

Notez que, logiquement/conceptuellement, vous gérez une association unidirectionnelle entre Movie et MovieGenre, en affectant des genres aux films.

+0

La première partie de votre réponse semble convaincante. Cependant, avoir une énumération des genres en ferait une liste fixe. La liste de genre globale peut croître ou rétrécir gérée par l'utilisateur. Quoi qu'il en soit, je pense que je vais comprendre. Ma principale préoccupation maintenant est de savoir comment programmer l'interface utilisateur en fonction du sous-ensemble des genres assignés aux films respectifs. Merci. – Lucifer

+0

Bon, vous avez raison, si la liste des genres n'est pas (à peu près) corrigée, alors vous ne pouvez pas utiliser une énumération, mais vous avez besoin d'une autre classe. Je vais modifier ma réponse. –