Je travaille avec un moteur de rapport personnalisé qui utilise XML et XSL pour envoyer les données du rapport au navigateur. Chaque rapport peut avoir plusieurs paramètres de différents types de valeur (entiers, chaînes, dates). Chaque rapport possède sa propre classe (héritant d'une classe de rapport de base) et XSLT qui récupère les données de la base de données en fonction des paramètres, génère le fichier XML et le style avec le fichier XSLT. Cependant, actuellement, les paramètres sont répertoriés individuellement dans chaque classe. Je pense qu'il est plus efficace de créer une classe Parameter, d'avoir une liste générique de tous les paramètres, d'ajouter les paramètres à la liste lorsque les données du rapport sont demandées, puis la classe de base peut parcourir la liste des paramètres .Comment créer une classe de paramètres à transmettre à des classes de rapports personnalisées?
Voici ce que le code ressemble maintenant:
public class Report
{
//Common functions used by all reports
}
public class OrderDetailReport : Report
{
public long? Parameter1 { get; set; }
public long? Parameter2 { get; set; }
public XElement CreateXML()
{
var xml = new XElement();
xml.Add(GetXMLParameters());
//Get Data and generate XML
return xml;
}
public XElement GetXMLParameters()
{
var parameters = new XElement("Parameters",
new XElement("Parameter",
new XAttribute("Name", "Parameter1"),
new XAttribute("Value", Parameter1)),
new XElement("Parameter",
new XAttribute("Name", "Parameter2"),
new Attribute("Value", Parameter2)));
return parameters;
}
}
Que devrait ressembler classe Parameter
comme pour qu'il puisse gérer tous les différents types de valeur et être en mesure de formater la valeur qui est affichée à l'écran?
EDIT:
Je veux être en mesure de déplacer la fonction GetXMLParameters()
à la classe de base et une liste de quelque chose comme List<Parameter>
dans la base qui GetXMLParameters()
fera une boucle à travers et créer le XML. Cela évitera d'avoir GetXMLParameters()
dans chaque classe CustomReport
.
Merci. J'espère que c'était clair.
Oran
http://msdn.microsoft.com/en-us/library/182eeyhh.aspx – WeNeedAnswers
Je ne comprends pas comment cela va résoudre mon problème. J'ai clarifié ce que j'essaie de faire dans la question. – orandov
Évitez l'héritage. Aller à la composition à la place. Le code sera moins fragile. Lorsque vous traitez des transformations d'objets qui, selon l'apparence de votre code, utilisent le modèle de visiteur. – WeNeedAnswers