Как вложенные компоненты должны взаимодействовать с моделью в приложении с графическим интерфейсом? - PullRequest
0 голосов
/ 16 июня 2010

Широкий вопрос дизайна / архитектуры.Если у вас есть вложенные компоненты в графическом интерфейсе, каков наиболее распространенный способ взаимодействия этих компонентов с данными?

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

Или модели / хранилища данных в приложении с графическим интерфейсом обычно одиночные, так что компонент на любом уровнеИерархия может напрямую получать / устанавливать данные?

Или контроллер вводится как зависимость вниз по иерархии компонентов, так что любой данный компонент находится на расстоянии всего одного посредника от хранилища данных / модели?

Ответы [ 3 ]

2 голосов
/ 16 июня 2010

Моя первая мысль - определить одноуровневый API уровня данных, который будет вызываться компонентами GUI.

Если вам нужно несколько экземпляров данных, тогда выдайте «дескрипторы», которые могут быть сохранены компонентами графического интерфейса и переданы на уровень данных для повторного вывода данных.

Эта идея похожа, например, на API файловой системы; или API сервера SQL; или любой O / S API.

1 голос
/ 16 июня 2010

Я согласен с STO выше:

  • Передача данных в базовый контроллер / модель представления, которая используется совместно с C / VM родительского представления, это то, что я делаю в большинстве моих приложений.1004 *
  • Наличие синглетонов - плохая идея!Если вы считаете, что вам нужен синглтон, вы можете достичь того же результата, вызвав Factory, которая кэширует экземпляры.Например, factory.GetAcountViewModel ();
  • Я бы не стал делегировать обработку родителю - в общем.Это снижает тестируемость кода, поскольку теперь вы передаете данные и состояние через уровень пользовательского интерфейса.

Просто к вашему сведению: Если вы готовы к дополнительному чтению, вы также можете проверить http://compositewpf.codeplex.com,, который решает обобщенную проблему составного пользовательского интерфейса.

1 голос
/ 16 июня 2010

Как правило, существует несколько возможных вариантов работы с вложенными компонентами:

  • Вложенный компонент использует ту же модель, что и корневой компонент / Вложенный компонент использует свою собственную модель.

  • Вложенный компонент взаимодействует с тем же контроллером, что и корневой компонент / Вложенный компонент работает со своим собственным контроллером.

Не существует единого правильного ответа, какой вариант использовать.Конечно, использовать ту же модель и тот же контроллер проще всего, но если вложенный компонент содержит сложную логику пользовательского интерфейса, лучше отделить модель и / или контроллер.

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

Я думаю, используя синглтоны для модели / контроллераЭто плохая идея, особенно если вы используете язык с сборщиком мусора.Использовать синглтон просто, но что если вам понадобится второй экземпляр вложенного элемента управления в корневом представлении?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...