Связь между виджетом, сервисом и моделью (синглтоном) приложения (MVC-подобная архитектура) - PullRequest
0 голосов
/ 10 июня 2011

У меня сложный вопрос, касающийся множества различных компонентов приложения. Я надеюсь быть достаточно ясным.

В моем приложении объект приложения, синглтон, предоставляет модель (также синглтон) для многих действий. Основным видом деятельности, представляет список синхронизированных данных для пользователя. Эти данные поступают из модели.

У меня также есть виджет, и я хочу, чтобы он: - обновлять при обновлении синхронизированных данных из модели (через графический интерфейс) - по прошествии времени обновляйте, чтобы отображать только 2 первых синхронизированных данных списка, удаляя те, которые сейчас устарели.

Для достижения второй цели я разработал сервис, который запрашивает у модели получение некоторых данных и использует таймеры для пробуждения после истечения срока действия первых данных, удаляет их из списка и затем отправляет широковещательную рассылку виджету с некоторыми данными Намерение, что виджет будет отображаться.

Это отлично работает.

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

Но вот моя проблема:

как модель может указать виджету на обновление? У службы есть все для обновления виджета, но движок не может знать , если есть виджет. Я не хочу, чтобы модель вызывала сервис, поскольку, возможно, нет виджета и нет необходимости в дополнительном процессе для сервиса.

Как можно элегантно переработать это взаимодействие?

Я действительно что-то здесь упускаю.

1 Ответ

1 голос
/ 10 июня 2011

Вы можете использовать шаблон Observer , чтобы заставить двигатель запускать события для любых компонентов в приложении, которые интересуются при каждом обновлении, при этом компонент, генерирующий события, не имеет реального знания о потребителях событий. ,

Объект Event, отправляемый в качестве параметра, должен содержать всю необходимую информацию о событии для обновления виджета пользовательского интерфейса и т. Д., Так что должен передаваться только этот абстрактный объект «события» - а ваши слои этого не делают. кровоточат друг в друге.

...