//pattern factory method. not much to say. public static IDataTransformer CreateTransformer(ReportConfig config) { IDataTransformer service = new DataTransformer(config); //pattern decorator. new data transformer wraps previous one around if (config.WithData) { service = new WithDataReportTransformer(service); } if (config.VolumeSum) { service = new VolumeSumReportTransformer(service); } if (config.WeightSum) { service = new WeightSumReportTransfomer(service); } if (config.CostSum) { service = new CostSumReportTransformer(service); } if (config.CountSum) { service = new CountSumReportTransformer(service); } return(service); }
//статический фабричный метод public static IDataTransformer CreateTransformer(ReportConfig config) { IDataTransformer service = new DataTransformer(config); if (config.WithData) { service = new WithDataReportTransformer(service); } if (config.VolumeSum) { service = new VolumeSumReportTransformer(service); } if (config.WeightSum) { service = new WeightSumReportTransfomer(service); } if (config.CostSum) { service = new CostSumReportTransformer(service); } if (config.CountSum) { service = new CountSumReportTransformer(service); } return(service); }
public static IDataTransformer CreateTransformer(ReportConfig config) { // TODO Найден паттерн: ChainOfResponsibility // Теперь мы можем навесить кучу обработчиков, при этом создавая эту цепочку динамически // Простое добавление новых агрегирующих функций IDataTransformer service = new DataTransformer(config); if (config.WithData) { service = new WithDataReportTransformer(service); } if (config.VolumeSum) { service = new VolumeSumReportTransformer(service); } if (config.WeightSum) { service = new WeightSumReportTransformer(service); } if (config.CostSum) { service = new CostSumReportTransformer(service); } if (config.CountSum) { service = new CountSumReportTransformer(service); } return(service); }
public static IDataTransformer CreateTransformer(ReportConfig config) { IDataTransformer service = new DataTransformer(config); //далее идут декораторы //и тут лучше использовать chain of responsibility или лучше fluent bilder if (config.WithData) { service = new WithDataReportTransformer(service); } if (config.VolumeSum) { service = new VolumeSumReportTransformer(service); } if (config.WeightSum) { service = new WeightSumReportTransfomer(service); } if (config.CostSum) { service = new CostSumReportTransformer(service); } if (config.CountSum) { service = new CountSumReportTransformer(service); } return(service); }
{ //видим Посредника, который отделил объекты друг от друга, и содержит всю логику системы public static IDataTransformer CreateTransformer(ReportConfig config) { IDataTransformer service = new DataTransformer(config); if (config.WithData) //вместо цеопчик If, лучше использовать цепочку обязанностей - Chain of Responsibility { service = new WithDataReportTransformer(service); //причем тут можно использовать также и БИлдер, } // например StateBuilder, чтобы конструировать объект // по частям в этом месте if (config.VolumeSum) { service = new VolumeSumReportTransformer(service); //также тут мы наблюдаем некий фасад, который предсавляет простой интерфейс к сложной подсистеме } if (config.WeightSum) { service = new WeightSumReportTransfomer(service); } if (config.CostSum) { service = new CostSumReportTransformer(service); } if (config.CountSum) { service = new CountSumReportTransformer(service); } return(service); }
public static IDataTransformer CreateTransformer(ReportConfig config) { // Цепь обязанностей, можно избавиться от кучи if-ов, дав доступ к конфигурации (проверка будет внутри каждого трансформера) // Исправил IDataTransformer service = new DataTransformer(config); service = new WithDataReportTransformer(service); service = new VolumeSumReportTransformer(service); service = new WeightSumReportTransfomer(service); service = new CostSumReportTransformer(service); service = new CountSumReportTransformer(service); return(service); }
public static IDataTransformer CreateTransformer(ReportConfig config) { IDataTransformer service = new DataTransformer(config); /* * Тут использованы декораторы (Decorator), а точнее создаются тут. * Идея хорошая, т.к. объекту динамически * добавляются новые обязанности. Конкретно тут применяется т.к. происходит модификация * аргументов (отчёта) в зависимости от заданных параметров (config). * * Кроме того сам процесс создания похож на... фабричный метод? Вроде как он. * Плюсы использования в том, что параметры создания задаются с помощью config. * Также сам процесс создания отделён от класса и задаётся "динамически". */ if (config.WithData) { service = new WithDataReportTransformer(service); } if (config.VolumeSum) { service = new VolumeSumReportTransformer(service); } if (config.WeightSum) { service = new WeightSumReportTransfomer(service); } if (config.CostSum) { service = new CostSumReportTransformer(service); } if (config.CountSum) { service = new CountSumReportTransformer(service); } return(service); }