Следует ли использовать Pattern Builder в качестве оболочки? - PullRequest
0 голосов
/ 18 октября 2011

Попытка оценить, следует ли заменить класс вспомогательных диаграмм с шаблоном построения. В классе помощника есть такие методы:

[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 на шаблон построителя, даже если это не чистая реализация шаблона построителя?

1 Ответ

1 голос
/ 18 октября 2011

Что ж, на мой взгляд, если вы уверены, что любой диаграммой в вашем приложении можно манипулировать (называйте ее настроенной, если хотите) с помощью этого или другого, но уникального набора методов или свойств, которые вы можете переключиться на шаблон Builder. Дело в том, что не очень понятно, если ваша фраза

Вместо того, чтобы пытаться удовлетворить эти различные конфигурации

может вписаться в область методов и свойств, предоставляемых одним абстрактным StandardChartBuilder классом. Если да, то Builder, безусловно, вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...