В моем приложении MVC я отображаю график, используя Swing. Управляется несколькими панелями с разными настройками. У меня есть MainModel
для создания и подачи DomainObject
, что ChartView
выходов. Поскольку имеется несколько панелей, и я не хотел увеличивать размер MainModel
, он создает ChildModels
для каждой панели с их собственными представлениями. В свою очередь, MainController
прикрепляет ChildControllers
к ним. «ChartView» регистрирует себя, чтобы наблюдать изменения в MainModel
для обновления вывода.
Первая проблема заключается в том, что, поскольку ChildModels
в основном являются частями MainModel
, их изменения должны запускать обновления на ChartView
(помимо их собственных представлений). Чтобы решить эту проблему, я должен был MainModel
зарегистрировать своих детей с помощью ChartView
вручную. Итак, теперь у меня есть несколько моделей, прикрепленных к ChartView
. Хотя я знаю, что это, вероятно, вызвано плохим дизайном (модель, которая создает дочерние модели и т. Д.), Решение работало нормально. Но я хотел бы услышать другие подходы к разрушению одной большой модели. У меня была одна идея - MainModel
прослушать изменения в ChildModels
и уведомить ChartView
. Таким образом, только одна модель взаимодействует с ChartView
.
Вторая проблема - запуск по цепочке ChartView
обновлений. Это происходит потому, что все эти панели с настройками имеют некоторые значения, которые зависят друг от друга. Таким образом, если пользователь вводит какое-либо значение в first panel
, диапазон, который может принимать значение от second panel
, изменяется. Когда контроллер обновляет second panel
, он запускает StateChange Event
. И поскольку ChartView
был подписан на прослушивание обновлений на ChildModels
, он будет получать уведомления об обновлениях от обеих панелей. Теперь в моем случае у меня 8 из них. Это делает один единственный ввод от пользователя, что приводит к перерисовке 8 ChartView
. Что, вероятно, опять же является результатом плохого дизайна. Но в этом случае я понятия не имею, как правильно обрабатывать эти множественные уведомления об обновлениях и GraphView
обновлять только по последнему запросу. Моим решением было сделать транзакционные обновления. Вместо одного уведомления для просмотра модели отправляют уведомления beginUpdate
и endUpdate
. Только после того, как представление получает endUpdate
, оно запрашивает у модели обновленные данные. Таким образом, уведомления об обновлении вложенных моделей становятся «отключенными».
Я хотел бы знать, как вы подходите к этим проблемам. Спасибо