Esempio n. 1
0
        // "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();
        }
Esempio n. 2
0
        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));
                }
            }
        }