2009-06-09 19 views
0

Ich entwerfe ein Dashboard, um Unternehmensmetriken anzuzeigen (derzeit mit ASP.net 3.5 in C#), und suche nach Rat zu Design. Ich bin nicht so an OOP in Webanwendungen gewöhnt.Polymorphismus mit Datenbankabfrage

Es kann viele verschiedene Metriken geben, die von verschiedenen Benutzern in einer Viele-zu-Viele-Beziehung gesehen werden können. Ich speichere die Benutzer in einer lokalen SQL-Datenbank und es ist natürlich sinnvoll, die Metadaten für jede "Metrik" zu speichern. Dies bietet auch eine Art Zugriffssteuerungsliste für jede einzelne. Jede Metrik kann mehrere verschiedene Diagramme haben, die unterschiedliche Designs haben (Balken, Spalten, Torten, Linien oder Kombinationen von solchen mit verschiedenen Reihen auf verschiedenen y-Achsen usw.).

Diese Diagramme können programmgesteuert entworfen und dann zur Laufzeit der ASP.net-Seite hinzugefügt werden. Es wäre schön, eine Vererbungsstruktur einer Oberklasse eines leeren Diagramms und verschiedener Diagrammtypen zu haben, die das erweitern.

Die Seite würde die Diagramme auswählen, die der angegebene Benutzer anzeigen und dann generieren kann. Dennoch sehe ich eine Art große switch-Anweisung als grobe Nachschlagetabelle für die entsprechende Unterklasse, die basierend auf den in der Datenbank ausgewählten Informationen instanziiert wird.

Gibt es einen künstlerischen Weg, dies zu tun? Irgendwie die Typdeklaration zur Laufzeit liefern? Sollte ich alle Stilinformationen über die Diagramme in die Datenbank verschieben und zusätzliche Tabellen und Spalten für Reihen, Datenpunkte, Farben usw. haben, wo eine einzelne Diagrammklasse alle notwendigen Abfragen durchführt und ein Diagramm erstellt? Vielen Dank.

Antwort

1

Ich realisierte, was ich suche, könnte mit dynamischem Klassenladen gelöst werden. Es gibt ein großartiges Beispiel für dynamisches Laden von Klassen in C# here von Michael Clarke.

Grundsätzlich kann ich eine Klasse basierend auf einem String-Dateinamen aus einer Abfrage laden.

0

Sie könnten den Namen Strong der Klasse in der Datenbank speichern und dann einfach eine Instanz der Klasse erstellen.

Anstatt also das Sortieren, dass sie ein Balkendiagramm Sie so etwas wie

YourNamespace.UI.Charts.Bar 

Persönlich würde ich nicht allzu Angst nur Speicher einen Diagrammtyp obwohl speichern könnte, wie es Sie mit einer Abstraktionsschicht sieht vor, dass kann hilfreich sein.