Je me débats avec la suppression des concepts de bonne conception de base de données avec un bon design orienté objet.
Traditionnellement si je voulais afficher une liste de nouvelles dans un répéteur, j'utiliserais quelque chose comme: P> < Pré> xxx pré>
ici news.getallNews () strong> retourne un DataTable strong>, qui n'est qu'une vidage de la procédure stockée. La procédure stockée est écrite pour renvoyer les données à l'aide de jointures. Il s'agit donc de plus d'une tables de données. P> L'avantage de ceci dans la base de données La procédure stockée peut rechercher qui a ajouté la nouvelle Le fort> ajouté strong> qui existe dans la table News Strong> et renvoie le nom complet des personnes comme la Toutefois si J'essaie de laisser tomber l'utilisation d'un jeu de données et renvoyez plutôt une liste des objets de presse, je reçois ce qui suit: p> mais maintenant je suis laissé avec le problème que certains Les valeurs que je veux afficher (comme ajout (Strong> ajouté strong>) n'existent pas dans l'objet News, car ils ne sont pas quelque chose qui est explicitement défini, mais au lieu de récupérer d'un identifiant de recherche dans l'objet. p> J'aimerais retourner des objets plutôt que pour les tatables, mais je ne connais pas la meilleure façon de combler cette lacune. P> Dois-je: ou suis-je totalement sur la mauvaise piste! P> p>
* Créez des propriétés supplémentaires dans la catégorie
* Coller avec
3 Réponses :
bonne question: p>
Il y a quelques approches que vous pouvez prendre: p>
Vous pouvez récupérer les données supplémentaires dont vous avez besoin sur l'événement contraignant du répéteur et le peupler dans un "espace réservé" pour chaque enregistrement de presse renvoyé. Cela a des problèmes de performance en raison de l'interrogation supplémentaire, mais cela fonctionnera. P> li>
Si possible, je modifierais l'objet News pour contenir les informations supplémentaires ou créer un objet qui hérite de l'objet News qui possédait des informations supplémentaires ou des propriétés contenues à l'intérieur. P> LI> ol>
J'espère que cela aide :-) +1 p>
Edit / Commentaire: Je pense que le frottement que vous voyez dans votre conception est que vous ne reconnaissez pas la relation "HAS-A" entre votre objet d'information et ce que j'appellerais son auteur / contributeur. La jointure que vous faites dans votre requête consiste simplement à dissimuler le manque de relation dans le modèle d'objet. P>
Merci pour l'entrée Achille: 1) Semblable à la suggestion de Gregoire. Comme vous dites que cela fera le travail, mais ce type d'approche semble être un travail supplémentaire? 2) Je sais que cela sera plus efficace, mais cela ressemble toujours à un peu de Spikey ... bien que je préfère cela sur l'option 1 I Office J'espère qu'une suggestion qui ressemble à droite, où ces approches ne ressentent pas tout à fait un ajustement parfait.
Je pense que le frottement que vous voyez dans votre conception est que vous ne reconnaissez pas la relation "HAS-A" entre votre objet d'information et ce que j'appellerais son auteur / contributeur. La jointure que vous faites dans votre requête consiste simplement à dissimuler le manque de relation dans le modèle d'objet.
Vous pouvez essayer ceci, peut-être pas la meilleure solution:
Ce type d'approche a traversé mon esprit, mais cela semble faire quelque chose qui serait mieux géré par une jointure dans une procédure stockée. Mais alors peut-être que c'est plus OO? :)
@Peter, vous devez faire le filtrage des données au niveau de la base de données. Vous pourriez passer dans NEW.GETALLNEWS (UtilisateursConsed) et gérer le tableau de votre proc. Cela pourrait réduire considérablement la quantité de trafic réseau en fonction de vos données.
Vos choix sont restreints par la technologie sous-jacente que vous êtes prêt à utiliser comme accès aux données. À l'heure actuelle, plusieurs alternatives sont nécessaires pour que le VS Toolset et .NET Framework prend en charge: P>
datatable code>
objets dans le code. LI>
iquéryable code>
et la syntaxe Linq dans le code. < / li>
de ceux-ci, tous sauf ado.net dactylography dactylography vous permettent de spécifier les relations de navigation telles que vous demandez, soit chargée avec impatience ou paresseusement. Dans un cas comme si vous décrivez que le THing naturel de ces technologies serait de modéliser les relations entre l'article de presse et l'auteur explicitement dans les concepteurs et laisser le cadre traiter avec le problème de la chargement des données appropriées et des types appropriés, en fin de compte. que le problème de jointure est traité implicitement par la couche d'accès aux données de l'application (le cadre) plutôt que par une procédure stockée explicitement créée. P>
Le choix de la technologie vous entraînera partout dans votre code, de la manière dont vous récupérez vos données sur la manière dont vous l'affichez et comment vous mettez à jour, aucune de ces technologies ne sont facilement interchangeables. Personnellement, je trouve que le bon équilibre entre puissance et complexité est avec Linq à SQL. P>
Merci pour votre entrée Remus - j'ai entendu SM arrêtait le développement de Linq à SQL en faveur du cadre de l'entité. Est-ce vrai et si oui, encourageriez-vous de nouveaux développements en utilisant cette technologie?
@Peter: Je ne suis plus avec Mme alors je ne saurais pas vraiment plus que la connaissance du public. Est vrai que EF est la voie recommandée à l'avenir, mais compte tenu de l'adoption écrasante de LINQ à SQL par rapport à EF, je serais suturé de le voir complètement abandonné.
J'utilise actuellement et profitez de LINQ2SQL pour un projet .NET 3.5. Mon prochain grand projet utilisera .NET 4.0, donc je vais utiliser l'entité Framework 4.0