Ho un requisito in cui l'utente seleziona un ReportType da un menu a discesa e fa clic sul pulsante di download. In base al tipo scelto, il sistema dovrebbe generare un report. Al momento ho solo un tipo di rapporto che è QuoteReport. In futuro avrò altri tipi di report come PolicyReport, ClaimReport. Al momento non ho idea di quali saranno i campi dati in questi report, ma "Avranno tutti almeno alcune proprietà comuni" come ID e Indirizzo
public class QuoteReport
{
public String DeviceType { get; set; }
public String ProductName { get; set; }
public String Description { get; set; }
public String ID { get; set; }
public String Address { get; set; }
}
Ora quello che sto facendo è inviare tipo di rapporto e parametri per compilare il rapporto e ho creato un caso di scambio per individuare il tipo di rapporto selezionato.
public string PrepareReport(string selectedReport, List<int> Ids)
{
string response = string.Empty;
try
{
ReportTypeEnum reportTypeEnum;
if (Enum.TryParse(selectedReport, out reportTypeEnum))
{
switch (reportTypeEnum)
{
case ReportTypeEnum.QuoteReport:
response = CreateReportData(Ids,response);
break;
default:
break;
}
}
}
catch (Exception exc)
{
handleException(DOWNLOAD_REPORT, exc);
}
return response;
}
Il mio metodo CreateReportData riempie i campi della classe QuoteReport da wcf.
public string CreateReportData(List<int> Ids, string response)
{
List<QuoteReport> quoteReportList = new List<QuoteReport>();
foreach (var Id in Ids)
{
dynamic dynamicEntity;
List<string> devices = proxy.GetData(Id);
for (int i = 0; i < devices.Count; i++)
{
QuoteReport quoteReport = new QuoteReport();
dynamicEntity = JObject.Parse(devices[i]);
quoteReport.Type = dynamicEntity.DeviceTypeString;
quoteReport.ProductName = dynamicEntity.ProductName;
quoteReport.Description = dynamicEntity.Desc;
quoteReport.ID = dynamicEntity.ID;
assetReport.Address = dynamicEntity.Address;
quoteReportList.Add(quoteReport );
}
}
response = JsonConvert.SerializeObject(quoteReportList );
return response;
}
Ora sono perplesso su come posso rendere il mio codice più generico. O dovrei usare alcuni schemi di progettazione come Factory per rendere il codice adattabile alle esigenze future? Come posso rendere generico il metodo CreateReportData in modo che accetti qualsiasi tipo di classe e lo riempia?