Лучший шаблон проектирования для вычисляемых значений на подклассе? - PullRequest
1 голос
/ 09 февраля 2011

скажем, у меня есть два типа:

ClassA
{
    int ValueA;
    int CalculatedA;
}

ClassB
{
    int ValueA;
    int CalculatedA;

    int ValueB;
    int CalculatedB;
}

CalculatedB требует ValueA, а также ValueB. Я пытаюсь выбрать лучший шаблон для реализации этого.

Опция 1: Подкласс ClassA и добавление дополнительных значений. Имейте общий Update() метод, который переопределен в подклассе. Это простой код в модели, но код для создания этих классов должен знать, что создавать заранее, и любой код, который перебирает список этих типов, должен выполнять проверку типов для работы с дополнительными полями.

Вариант 2: Имейте дополнительные свойства в отдельном классе, и там есть код обновления для CalculatedB. Проблема с этим заключается в том, что ClassB тогда требуется какой-то способ узнать, когда обновляется ValueA, и я надеялся, что не нужно реализовывать что-то вроде INotifyPropertyChanged в этих классах. Другим способом сделать это является использование какого-либо общедоступного метода Update для класса дополнительных свойств и вызов основного метода для вызова этого метода при обновлении ValueA. Также не желательно.

Вариант 3: Просто укажите ClassB с ValueB и CalculatedB, которые могут быть обнуляемыми типами. Pass.

Есть еще? Что бы вы выбрали?

1 Ответ

1 голос
/ 09 февраля 2011

Если ClassB не связан с ClassA, то использование подклассов не является хорошим методом.Кстати, в .Net мы обычно не выставляем открытые поля, но открываем общие свойства (предположим, C #)

public class ClassA{
    public int ValueA {get;set;}
    //...
}

Поскольку ClassB.CalculateB сильно зависит от ValueA, почему бы просто не вычислить значение на лету,так что вам не нужно беспокоиться об изменении собственности.

public class ClassB {
    public int ValueB {get;set;}
    public int getCalculateB(ClassA a){
        //...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...