У меня есть требование, когда пользователь выбирает тип ReportType из раскрывающегося списка и загружает кнопку загрузки. Основываясь на выбранном типе, система должна сгенерировать отчет. Прямо сейчас у меня есть только тип отчета, который является QuoteReport. В будущем у меня будут другие типы отчетов, такие как PolicyReport, ClaimReport. Прямо сейчас я понятия не имею, какие будут поля данных в этих отчетах.Как создать общую структуру классов
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; }
}
Теперь, что я делаю, я отправить ReportType и paramters заполнить отчет и я создал корпус переключателя, чтобы поймать тип отчета выбран.
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;
}
Мой метод CreateReportData заполняет поля класса QuoteReport из 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;
}
Теперь я озадачен, как сделать код более универсальным. Или я могу использовать некоторые шаблоны проектирования, например Factory, чтобы сделать код адаптированным для будущих потребностей. Как я могу создать общий метод CreateReportData, чтобы он принимал любой тип класса и заполнял его свойства из службы.
Вопрос слишком неопределен/широк для SO в текущем состоянии. Это может быть хорошей идеей ждать с рефакторингом, пока вы не узнаете свой вариант использования. Написание генерического кода для одного случая сложно и, вероятно, не полезно при введении других случаев. –
@AlexeiLevenkov Должен ли я использовать любой шаблон проектирования для создания структуры – pankaj
Не используйте переключатель - используйте «Словарь <Тип, Func>» (или что-то подобное), чтобы включить динамическое создание разных типов. Кроме того, никогда не используйте код 'catch (Exception exc)' - вы должны ** ** ** всегда ловить ошибки, которые вы можете специально восстановить. –
Enigmativity