Отвечаю, добавление новой зависимости не составит труда. В утилите Rule нужно добавить третий параметр - тип зависимости.
Вот код утилиты Rule::applyRule
void Rule::applyRule(const AbstractFormComponent & master, AbstractFormComponent & slave) { //преобразование мастера const FSexEdit * masterSex = dynamic_cast<const FSexEdit *>(&master); //преобразование раба FComboTextList * slaveCombo = dynamic_cast<FComboTextList *>(&slave); //зависимости от секса if (masterSex) { if (slaveCombo) { apply(*masterSex, *slaveCombo); } } }
Как видно из кода - я делаю динамическое преобразование с помощью dynamic_cast, а затем в зависимости от результата вызываю функцию apply, аргументами которой являются уже конкретные типы FSexEdit и FComboTextList.
Чтобы расширить набор зависимостей, мне нужно в функции apply добавить третий параметр - вид зависимости.
void Rule::apply(const FSexEdit & sex, FComboTextList & combo, int depType)
Тип зависимости будет узнавать функция applyRule из экземпляра master.
Так, что изменения минимальны, код легко расширяется. Все изменения не выходят за границы утилиты класса.
Комментариев нет:
Отправить комментарий