2009-06-09 8 views
0

Je suis en train de concevoir un tableau de bord pour afficher les métriques d'entreprise (actuellement avec ASP.net 3.5 en C#), et je cherche des conseils sur la conception. Je ne suis pas habitué à la POO dans les applications web.Polymorphisme avec requête de base de données

Il peut y avoir plusieurs métriques différentes qui peuvent être vues par différents utilisateurs dans une relation plusieurs-à-plusieurs. Je stocke les utilisateurs dans une base de données SQL locale et il est bien sûr logique de stocker les métadonnées pour chaque "métrique". Cela fournit également une sorte de liste de contrôle d'accès pour chacun. Chaque mesure peut avoir plusieurs diagrammes différents qui ont des conceptions différentes (barres, colonnes, tartes, lignes, ou des combinaisons de ceux avec des séries différentes sur différents axes y, etc ...).

Ces graphiques peuvent être conçus par programme, puis ajoutés à la page ASP.net lors de l'exécution. Ce serait bien d'avoir une structure d'héritage d'une super-classe d'un graphique vierge et de différents types de graphiques qui étendent cela.

La page sélectionne les diagrammes que l'utilisateur donné a le droit de voir, puis de générer ceux-ci. Pourtant, je vois une sorte de grosse déclaration de commutateur comme une table de recherche brute pour la sous-classe appropriée à instancier en fonction des informations sélectionnées dans la base de données.

Y a-t-il une manière plus artistique de faire cela? D'une certaine manière fournissant la déclaration de type à l'exécution? Dois-je déplacer toutes les informations de style sur les graphiques dans la base de données et ajouter des tables et des colonnes pour les séries, les points de données, les couleurs, etc., où une seule classe de graphique effectue toutes les requêtes nécessaires et construit un graphique? Merci.

Répondre

1

Je me suis rendu compte que ce que je cherchais pourrait être résolu avec un chargement de classe dynamique. Il existe un excellent exemple de chargement de classe dynamique dans C# here de Michael Clarke.

Fondamentalement, je peux charger une classe basée sur un nom de fichier de chaîne provenant d'une requête.

0

Vous pouvez stocker le nom fort de la classe dans la base de données, puis créer simplement une instance de la classe.

Ainsi, au lieu de tri qui est un graphique à barres que vous pouvez stocker quelque chose comme

YourNamespace.UI.Charts.Bar 

Personnellement, je ne serais pas trop peur de simplement stocker un type de graphique mais comme il vous fournit une couche d'abstraction peut être utile.