Область применения модифаеров - ТОЛЬКО диалог?
Пока (и в обозримом будущем) да. История. Была (и есть) большая таблица (типа спрыдшыт) в ней юзер чего-то выбирал и сразу вызывал из меню модифайер, его опции появлялись в модальном диалоге. Это однако имело дефект - неясно что и как должно модифицироваться для разнородных выборок. Также есть др большое окно где ряд параметров представлен в виде графиков. Там тоже насовали кучу менюх что по существу тоже "зовут модифайеры". Ну и наконец неплохо иметь возможность менять параметры "без всякого окна" просто выбрав их из списка. Поэтому решили разгрузить окна и объединить модифайеры в одном большом новом диалоге.
Те. они применяются не к "модели данных", а только к объектам диалога?
Объекты диалога - всего лишь ссылки на модели данных.
Однозначно всё нужно запихнуть в диалог. Зачем дублировать код и распылять его по куче классов. А в диалоге модификаторы сразу на нужном месте.
И не только модифайеры, но и весь "контекст". Правда смешивать UI с "бизнес-логикой" (идиотский термин) не есть хорошо, но... то ж в теории, а у нас конкретный случай (и.т.п.)
Тех же, кто посоветует паттерн Visitor, или ещё какую заумную штуку, следует заклеймить в поклонении Букварю и предать анафеме. Ибо негоже пятнать чистую иерархию классов всякими еретичными методами.
Примечание: Variant еретичным не считается.
Не вижу причем тут Visitor, Variant и вообще раздраженная ирония
Будут ли модифайеры расписаны свитчом или виртуалами или темплейтами - совсем не тот вопрос что я хотел обсудить. Дело в другом. Вот я не раз упоминал о "контексте". Пример
C++ (Qt)
virtual bool AbstractModifier::Modify( QVariant & target );
Для простейших модифайеров - все хорошо, уж нулями (заданным значением) как-то заполним. Но вот чуть более сложный случай - заполнять текущим значением параметра (оно есть). Откуда модифайер его возьмет? Или вот напр интерполировать значения в заданном диапазоне - тут и границы надо знать и диапазон. И.т.д. Ну и даже для простейшего заполнения - кто-то должен проходиться по диапазону меняемых кадров и вызывать модифайер для каждого.