2014-02-20 6 views
1

Я дам минималистский пример, чтобы объяснить мой вопрос. Предположим, что существует Shape класс:Имеет ли переменная класса право на существование, если ее значение может быть рассчитано с использованием других данных?

public class Shape { 
    User user; 
    int color; 
} 

и User класс:

public class User { 
    int mood; 
} 

Теперь предположим, что цвет форма зависит от настроения пользователя. Является ли это избыточным для Shape, чтобы иметь поле color, так как оно может быть рассчитано путем доступа к его настроению user?

Учтите, что в более реалистичном примере доступ к необходимым данным для расчета цвета может быть более сложным или с помощью более длинной последовательности аксессуаров (color = user.getCat().getCousin().getMood()). Рассмотрим далее, что эти классы могут быть сопоставлены с базой данных и (в некотором смысле) дублирующимися данными. С другой стороны, они могут быть отмечены как переходные.

Цвет зависит от настроения, но цвет не совпадает с настроением. Поэтому включение поля color кажется мне логичным, однако я не могу полностью оправдать этот дизайн.

Имеет ли переменная класса право на существование, если ее значение может быть рассчитано с использованием других данных?

ответ

1

Я предлагаю вам сделать цвет собственности, таким образом, вы можете вычислить его или нет, а остальная часть программы не изменится.

Расчет его каждый раз будет медленнее, добавьте дополнительный код каждый раз, когда он вызывается. Сохранение значения будет быстрее (не нужно рассчитывать каждый раз), но вы добавляете риск не иметь правильное значение, если оно не обновляется должным образом.