// "Files/table.txt" -data -weightSum -costSum -withIndex -withTotalVolume public static void Main(string[] args) { var service = ReportServiceFactory.GetReportService(args); // Используем Factory, см. ReportServiceFactory.cs var report = service.CreateReport(); // Реализовываем Builder для вывода таблиц вместо обычной функции // Кода стало побольше, но он аккуратнее, причем мы теперь можем быстро менять порядок/набор столбцов, которые хотим вывести // Логика, отвечающая за наличие/отсутствие столбцов скрыта внутри билдера var reportPrinter = new ReportPrinterBuilder(report) .AddIndex() // Добавляем столбцы .AddName() .AddPackageVolume() .AddMass() .AddCost() .AddCount() .AddTotalVolume() .AddTotalWeight() .Create(); // Все добавили, создаем принтер reportPrinter = new ReportPrinterWarningDecorator(reportPrinter); // Будем выводить с предупреждением reportPrinter.Print(); Console.WriteLine(""); Console.WriteLine("Press enter..."); Console.ReadLine(); }
private static void PrintReport(Report report) { if (report.Config.WithData && report.Data != null && report.Data.Any()) { IBuilder reportPrinterBuilder = new ReportPrinterBuilder(); //feature //title is always present, but other columns may be omitted. //although arguments for removing volume, weight, etc. are not implemented, //possibility of not selecting them in builder should be good enough for it to count as feature implementation reportPrinterBuilder = reportPrinterBuilder.ShowVolume().ShowWeight().ShowCost().ShowCount(); if (report.Config.WithIndex) { reportPrinterBuilder = reportPrinterBuilder.ShowIndexes(); } if (report.Config.WithTotalVolume) { reportPrinterBuilder = reportPrinterBuilder.ShowTotalVolume(); } if (report.Config.WithTotalWeight) { reportPrinterBuilder = reportPrinterBuilder.ShowTotalWeight(); } Console.WriteLine(reportPrinterBuilder.Build().Print(report)); Console.WriteLine(); } if (report.Rows != null && report.Rows.Any()) { Console.WriteLine("Итого:"); foreach (var reportRow in report.Rows) { Console.WriteLine(string.Format(" {0,-20}\t{1}", reportRow.Name, reportRow.Value)); } } }