Слово, которое вы ищете, это ортогональность . Настройки не ортогональны, так как они не могут варьироваться независимо.
Что касается того, как обрабатывать показ этих свойств, то совершенно общий способ сделать это (и ваша проблема может не оправдать затраты на кодирование этой универсальности) состоит в том, чтобы дать каждому элементу управления выражение, которое ссылается на другие элементы управления, где полное выражение оценивается как true (или false), элемент управления отключен в представлении.
Более простым в написании кода будет элемент управления, который предоставляет метод isDisabled()
, который можно при необходимости переопределить. Вот короткий пример Java, который использует анонимные классы Java для выполнения тяжелой работы. Предполагается, что уже существует класс Control
с геттером booleanValue()
, который преобразует его в логическое значение, и поскольку AutoDisabledControl
является элементом управления, его можно использовать в качестве замены для элемента управления:
public class AutoDisabledControl extends Control {
public isDisabled() { return false ; }
}
..... usage ....
// control1 is never disabled
final Control1 = new AutoDisabledControl() ;
// Control2 is disabled if control1 is false
final Control2 = new AutoDisabledControl() {
public isDisabled() { return control1.booleanValue() == false; }
};
// conntrol 3 is enabled only if control1 and control2 are true
final Control1 = new AutoDisabledControl() {
public isDisabled() { return ! (
control1.booleanValue()
&& control2.booleanValue()) ;
};
Естественно, на экране View он проверяет isDisabled()
каждого элемента управления и отключает те, которые возвращают true; при изменении значения элемента управления представление снова отображается. Я предполагаю что-то вроде MVC Pattern.