Попытка оценить, следует ли заменить класс вспомогательных диаграмм с шаблоном построения. В классе помощника есть такие методы:
[ChartHelper]
public static ChartTitle CreateStandardChartTitle(string titleText){}
public static void SetBarWidths( BarSeriesView bars ){}
public static void SetHorizontalChartHeight( WebChartControl chart,
int seriesCount, int margin ){}
public static void SetVerticalChartWidth( WebChartControl chart,
int seriesCount, int margin ){}
public static Legend SetStandardLegendProperties(WebChartControl chart){}
Очевидно, что эти методы модифицируют существующие объекты и просто изменяют различные свойства в WebChartControl. Это работает довольно хорошо для большинства сценариев, но методы не всегда применяются ко всем возможным типам диаграмм (столбец, линия, круговая диаграмма и т. Д.), И иногда существуют разные «конфигурации» того, как должна выглядеть диаграмма, которые отличаются от этих помощников методы. Вместо того, чтобы пытаться удовлетворить эти различные "конфигурации" с помощью вспомогательного класса, мне было интересно узнать о шаблоне компоновщика.
Из того, что я понимаю, шаблон строителя используется для построения сложных объектов. В моем случае у меня уже есть сложный объект (WebChartControl). Так что, если бы я использовал шаблон компоновщика, он просто обернулся бы вместо создания WebChartControl.
Я отбросил некоторый код из того, что я представляю:
Режиссер:
public class ChartDirector
{
private WebChartControl chart;
public ChartDirector(WebChartControl chart)
{
this.chart = chart;
}
private StandardChartBuilder standardBuilder;
public void Construct(StandardChartBuilder standardBuilder)
{
this.standardBuilder = standardBuilder;
this.standardBuilder.Chart = this.chart;
this.standardBuilder.BuildBorderOptions();
this.standardBuilder.BuildPalette();
this.standardBuilder.BuildLegend();
this.standardBuilder.BuildSeriesLabel();
}
}
Бетонный строитель:
public class BarChartBuilder : StandardChartBuilder
{
public WebChartControl Chart { get; set; }
public BarChartBuilder()
: base(ChartType.Bar)
{
}
public override void BuildBorderOptions()
{
Chart.BorderOptions.Visible = false;
}
...
}
Абстрактный конструктор, допускающий различные конфигурации ...:
public abstract class StandardChartBuilder
{
public WebChartControl Chart { get; set; }
public StandardChartBuilder(ChartType chartType){}
public abstract void BuildSeriesLabel();
public abstract void BuildBorderOptions();
public abstract void BuildPalette();
public abstract Legend BuildLegend();
}
Как видно из приведенного выше кода, ChartDirector не создает новый объект, он просто изменяет свойства существующего объекта, который упаковывается.
Итак, мой вопрос по-прежнему стоит, я должен заменить класс ChartHelper на шаблон построителя, даже если это не чистая реализация шаблона построителя?