singlepost

Задачка про GUI и OOP. << На главную или назад  

Всем привет! Делаю один GUI и задумался над проблемой с дизайном.

Есть ползунок, есть объект "Звук" со свойством "громкость". Есть еще какая-то фиговина, рисующая децибелы. Или другой ползунок (в другом месте). На языке MVC: есть два View для одной Model. Controller подразумевается где-то посередине, не суть. Паттерн, который я придумал (велосипед, конечно) состоит в том, что ползунок обновляется не из-за движения мыши, а после получения события от модели, что, мол, громкость изменилась.

Алгоритм такой: все вьюхи подписаны на события модели. Когда двигаешь мышью, вычисляется громкость и кидается в контроллер/модель. А перерисовка происходит только когда модель, изменив громкость, сообщает, что можно перерисовать ползунок. И тогда все вьюхи, включая ту, которая породила изменение, обновляются.

Если изменение медленное, то перерисовывать можно сразу, но это уже будет оптимизацией, плюс, с использованием тех же событий. И далеко не всегда необходимой оптимизацией (лишь для асинхронных действий).

Выгода от такого (событийного) дизайна в том, что добавлять несвязанные друг с другом контролы гораздо легче — весь обмен информацией идет через подписанные listener-ы. Не требуется иметь кучу флагов состояний в каждом контроле и модели.

Если у вас есть опыт в таких штуках, поделитесь им.

Ответы недоступны

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.