Сравнить. Выявить произведенные рефакторинги, улучшения и их смысл.
Время выполнения 15 мин.
Совет: скопировать код «до» и «после» в cs файлы и анализировать в студии.
До:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
public class MdxToReportByPeriodsOLAP : MdxQueryBuilder { const string FIELD_MEMBER = "field"; const string FIELD_ALL_MEMBER = "fieldAll"; public MdxToReportByPeriodsOLAP( string measure, PeriodType periodType, SubGroupParameter parameter, bool isGrowthAggregateType) { _parameters = parameter; this._measure = measure; this._isGrowthAggregateType = isGrowthAggregateType; this._periodType = periodType; } private IMdxElement Field() { IMdxElement field; if (_isGrowthAggregateType) //TODO: заменить на ООП и в учебный пример. { field = new MdxMember(FIELD_MEMBER, new MdxSubtraction( new MdxSum(new MdxHierarchy(PeriodTypeMesuareName).CurrentMember(), _measure), new MdxSum(new MdxHierarchy(PeriodTypeMesuareName).PrevMember(), _measure))); } else { field = new MdxMember(FIELD_MEMBER, new MdxMeasureElement(_measure)); } return field; } } public string GetOlapJsons( SubGroupParameter data, string measure, PeriodType periodType, bool isFirst, bool isGrowthAggregateType) { var builder = new MdxToReportByPeriodsOLAP(measure, periodType, data, isGrowthAggregateType); … } |
После
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
public class MdxToReportByPeriodsOLAP : MdxQueryBuilder { const string FIELD_MEMBER = "field"; const string FIELD_ALL_MEMBER = "fieldAll"; public MdxToReportByPeriodsOLAP( string measure, PeriodType periodType, SubGroupParameter parameter, IMeasureCreator measureCreator) { _parameters = parameter; this._measure = measure; _measureCreator = measureCreator; this._periodType = periodType; } private IMdxElement Field() { var field = new MdxMember(FIELD_MEMBER, _measureCreator.Create(_measure)); return field; } } public interface IMeasureCreator { IMdxElement Create(string measure); } public class GrowthMeasureCreator : IMeasureCreator { private readonly string _periodTypeMesuareName; public GrowthMeasureCreator(string periodTypeMesuareName) { _periodTypeMesuareName = periodTypeMesuareName; } public IMdxElement Create(string measure) { return new MdxSubtraction( new MdxSum(new MdxHierarchy(_periodTypeMesuareName).CurrentMember(), measure), new MdxSum(new MdxHierarchy(_periodTypeMesuareName).PrevMember(), measure)); } } public class MeasureCreator : IMeasureCreator { public IMdxElement Create(string measure) { return new MdxMeasureElement(measure); } } public string GetOlapJsons( SubGroupParameter data, string measure, PeriodType periodType, bool isFirst, bool isGrowthAggregateType) { IMeasureCreator measureCreator = null; if (isGrowthAggregateType) { measureCreator = new GrowthMeasureCreator(SaturnMeasures.PeriodTypeMesuareName(periodType)); } else { measureCreator = new MeasureCreator(); } var builder = new MdxToReportByPeriodsOLAP(measure, periodType, data, measureCreator); … } |
Сравнение и анализ кода «До» и «После» можно посмотреть в видео ниже.