Шаблон оформления декоратора и зависимость между компонентами - PullRequest
0 голосов
/ 29 января 2020

У меня есть сценарий использования для рисования некоторой машины в программном обеспечении CAO, которую пользователь может настроить (например, установка длины, если опция должна отображаться графически или нет, и т. Д. c.). Это делается с помощью программного обеспечения (Autocad) с использованием динамических c свойств, слоев или блоков для отображения / скрытия, поэтому с другими типами поведения. Количество возможных вариантов варьируется от одного оборудования к другому, и у нас часто появляются новые параметры для наших продуктов.

Я начал использовать шаблон декоратора для управления различными параметрами оборудования. Моя главная проблема сейчас заключается в том, что некоторые значения параметров являются взаимозависимыми (мне нужно, например, текущее значение текущего декоратора, умноженное на значение другого ..., которое может быть перенесено в первый декоратор или может обернуть его).

Есть ли у вас какие-либо подсказки, если: - Чего я хочу добиться, возможно в границах шаблона декоратора? - Я совершенно не прав и должен использовать другой тип шаблона проектирования для моего варианта использования?

Вот несколько упрощенных материалов моей реализации:

Мой компонентный интерфейс

public interface Component
{
    void Draw();

    void Store();
}

У меня есть класс «machine», который представляет основную c информацию о машине, которая является фиксированной:

public class Machine : Component
{
    public int MachineID { get; set; }

    public void Draw()
    {
        //Do some stuff
    }

    public void Store()
    {
        //Do some stuff
    }
}

Аннотация класс, представляющий параметры:

public abstract class Parameter : Component
{
    internal string ParameterName;
    internal string Value;
    internal Component BaseComponent;

    public Parameter(string _parameterName, string _value, Component _component)
    {
        ParameterName = _parameterName;
        Value = _value;
        BaseComponent = _component;
    }

    public abstract void Draw();

    public void Store()
    {
        //Do store data in the drawing (same procedure for any parameter)
    }
}

И конкретный класс параметров:

public class ConcreteParameter : Parameter
{
    internal string SomeAdditionalMember;

    public ConcreteParameter(string _parameterName, string _value, Component _component) : base(_parameterName, _value, _component) { }

    public override void Draw()
    {
        this.BaseComponent.Draw();
        //Draw in a specific way in addition to parent drawing
    }
}

Заранее благодарим за любые советы по топи c!

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