Учебники

MVVM — Интервью Вопросы

Модель, представление, ViewModel (шаблон MVVM) — это руководство, помогающее вам организовать и структурировать код для написания поддерживаемых, тестируемых и расширяемых приложений.

Модель — она ​​просто хранит данные и не имеет ничего общего с какой-либо бизнес-логикой.

ViewModel — Он действует как связь / соединение между Model и ViewModel и делает вещи красивыми.

Представление — оно просто содержит отформатированную дату и по существу делегирует все в модель.

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

Есть три ключевых момента, которые вытекают из применения MVVM —

В общем, модель является самой простой для понимания. Это модель данных на стороне клиента, которая поддерживает представления в приложении.

Он состоит из объектов со свойствами и некоторых переменных для хранения данных в памяти.

Некоторые из этих свойств могут иметь ссылку на другие объекты модели и создавать граф объектов, который в целом является объектами модели.

Объекты модели должны вызывать уведомления об изменении свойств, что в WPF означает привязку данных.

Последняя обязанность — проверка, которая является необязательной, но вы можете встроить информацию проверки в объекты модели, используя функции проверки привязки данных WPF через интерфейсы, такие как INotifyDataErrorInfo / IDataErrorInfo.

Основная цель и обязанности представлений состоит в том, чтобы определить структуру того, что пользователь видит на экране. Структура содержит статические и динамические части.

Статические части — это иерархия XAML, которая определяет элементы управления и макет элементов управления, из которых состоит представление.

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

Основная цель MVVM состоит в том, что в представлении не должно быть никакого кода.

По крайней мере, вам нужен конструктор и вызов для инициализации компонента.

Логический код для обработки событий, действий и манипуляций с данными не должен быть в коде позади в View.

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

ViewModel является основной целью приложения MVVM. Основная ответственность ViewModel заключается в предоставлении данных для представления, чтобы представление могло отображать эти данные на экране.

Это также позволяет пользователю взаимодействовать с данными и изменять данные.

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

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

ViewModel также должен управлять любой логикой навигации, например, решать, когда пора переходить к другому представлению.

Есть два способа построения представлений. Вы можете использовать любой из них.

Один из способов — просто добавить вашу ViewModel как вложенный элемент в установщик для свойства DataContext, как показано в следующем коде.

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

Как правило, свойство DataContext устанавливается в методе конструктора представления, но вы также можете отложить конструкцию, пока не произойдет событие Load представления.

Основная причина создания ViewModel в выделенном коде вместо XAML заключается в том, что конструктор модели представления принимает параметры, но при разборе XAML элементы могут создаваться только в том случае, если они определены в конструкторе по умолчанию.

ViewModelLocator предоставляет стандартный, согласованный, декларативный и слабо связанный способ создания первой конструкции View, которая автоматизирует процесс подключения ViewModel к View. Следующее — процесс высокого уровня ViewModelLocator.

Привязка данных является ключевой функцией, которая отличает MVVM от других шаблонов разделения пользовательского интерфейса, таких как MVC и MVP.

Привязки данных могут быть OneWay или TwoWay для передачи данных назад и вперед между View и ViewModel.

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

В паттерне Command есть два главных актера, вызывающий и получающий.

Чешуи

Invoker — это кусок кода, который может выполнять некоторую императивную логику. Как правило, это элемент пользовательского интерфейса, с которым пользователь взаимодействует в контексте инфраструктуры пользовательского интерфейса. Но это может быть просто еще один кусок логического кода где-то еще в приложении.

Получатель

Receiver — это логика, предназначенная для выполнения при срабатывании инициатора. В контексте MVVM получатель — это обычно метод в вашей ViewModel, который необходимо вызвать.

Между инициатором и получателем у вас есть слой препятствий, который не позволяет инициатору и получателю явно знать друг о друге. Обычно это представляется как абстракция интерфейса, доступная для вызывающего, и конкретная реализация этого интерфейса способна вызвать получателя.

Нет, если кусок контента просто предоставляет структуру для рендеринга чего-либо на экран и не поддерживает ввод или манипулирование пользователем для этого контента. Возможно, он не нуждается в отдельной ViewModel, но это может быть просто фрагмент XAML, который визуализируется на основе свойств, предоставляемых родительской ViewModel.

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

Вы можете использовать следующие способы выражения проверки, которые поддерживаются привязкой данных WPF:

Инверсия управления (IoC) и внедрение зависимостей — два тесно связанных между собой шаблона проектирования, и контейнер — это, по сути, кусок кода инфраструктуры, который выполняет оба эти шаблона за вас. Шаблон IoC предназначен для делегирования ответственности за построение, а шаблон внедрения зависимостей — для предоставления зависимостей объекту, который уже был создан.

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