MVVM и вход в Windows - PullRequest
       5

MVVM и вход в Windows

2 голосов
/ 26 сентября 2010

Я пишу свое первое «настоящее» приложение MVVM, и первый шаг, который должен сделать пользователь, - предоставить учетные данные для входа. Раньше я бы показывал диалоговое окно входа в систему после того, как главное окно было выложено и отображено впервые.

Каков предпочтительный способ сделать это в мире MVVM и почему?

Я вижу много вариантов, один из которых заключается в том, чтобы продолжать делать это так, как я делал это раньше, поскольку это одноразовый шаг, который не будет мешать остальной части "MVVM-сущности" приложения , Как только пользователь вошел в систему, я мог инициализировать ModelView MainWindow с его учетными данными, а затем продолжить свой путь. Другой вариант - позволить ModelView вызвать диалоговое окно входа в систему (как-то). Гуру MVVM предпочитают любого из них?

(Существует еще одна опция, которая сначала показывает диалоговое окно входа в систему, а затем, когда оно закрывается, создайте главное окно. Это технически решило бы мою дилемму, но на самом деле это не научило бы меня и не понравилось эстетика наличия «голого» диалогового окна входа.)

Ответы [ 2 ]

2 голосов
/ 28 сентября 2010

Шаблон Model-View-ViewModel не говорит нам, как определить рабочий процесс пользовательского интерфейса. Мы можем сами выбрать подходящий рабочий процесс. Я бы предпочел ваш первый подход, потому что он прост и понятен в реализации. Рабочий процесс:

  1. Показать пустое главное окно
  2. Показать диалог входа в систему
  3. Инициализировать главное окно с учетными данными пользователя
За

отвечает Контроллер (например, ApplicationController). Как это может выглядеть, показано в ViewModel примере приложения WPF Application Framework (WAF) .

0 голосов
/ 26 сентября 2010

Я думаю, что лучший вариант (более чистый, тестируемый ...) был бы для ViewModels, чтобы инициировать отображение диалога, так как логика должна принадлежать виртуальной машине, а не представлению ... Это «показ» обычно реализуется путем создания чего-то вроде DialogService, который должен позаботиться только об этом - Создайте абстракцию для своего модального окна (например, создав интерфейс с методом, подобным ShowDialog () и свойством DialogResult и, возможно, более - это зависит от вашей конкретной потребности), который реализуют ваши диалоги; затем создайте свой DialogService, который зависит от вашей абстракции диалога, и в этом сервисе вы можете вызвать ShowDialog, проверить значение DialogResult и т. д .; В вашей виртуальной машине вы будете использовать только эту диалоговую службу, не имея ссылки на некоторые вещи, относящиеся к представлению ... Я не буду вдаваться в подробности, поскольку есть некоторые реализации для отображения / работы с модальными диалогами с вашей виртуальной машины, которые основанный на этом (и больше) ... Выбор этого подхода также дает вам независимость от платформы пользовательского интерфейса. НТН.

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