Расскажите о паттерне MVVM. Пример

Model-View-View Model (Используется в ситуации, когда возможно связывание данных без необходимости ввода специальных интерфейсов представления)

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

Признаки View-модели:

* Двухсторонняя коммуникация с представлением;

* View-модель — это абстракция представления. Обычно означает, что свойства представления совпадают со свойствами View-модели / модели

* View-модель не имеет ссылки на интерфейс представления (IView). Изменение состояния View-модели автоматически изменяет представление и наоборот, поскольку используется механизм связывания данных (Bindings)

* Один экземпляр View-модели связан с одним отображением.

Реализация:

При использовании этого паттерна, представление не реализует соответствующий интерфейс (IView).

Представление должно иметь ссылку на источник данных (DataContex), которым в данном случае является View-модель. Элементы представления связаны (Bind) с соответствующими свойствами и событиями View-модели.

В свою очередь, View-модель реализует специальный интерфейс, который используется для автоматического обновления элементов представления. Примером такого интерфейса в WPF может быть INotifyPropertyChanged.

 

5. Асинхронность vs многопоточность. Пример. Асинхронность (asynchrony) подразумевает, что операция может быть выполнена кем-то на стороне: удаленным веб-узлом, сервером или другим устройством за пределами текущего вычислительного устройства.

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

// Асинхронная версия
private async void OnButtonClick()// ключевое слово async не приводит к тому,что метод будет //выполняться в фоновом потоке, а только отмечает,
{ //
что внутри метода присутствует await который работает
TextBox.Text = await new WebClient().DownloadStringTaskAsync("http://habrahabr.ru/");
} //
с Task<T> таким образом что остаток метода после await

//будет выполнен после завершения Task, но в основном потоке

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

 

Многопоточность - это один из способов реализации конкурентного исполнения путем выделения абстракции "рабочего потока" (worker thread).

Потоки "абстрагируют" от пользователя низкоуровневые детали и позволяют выполнять более одну работу "параллельно". Операционная система, среда исполнения или библиотека прячет подробности того, будет многопоточное исполнение конкурентным (когда потоков более чем физических процессоров), или параллельным (когда число потоков меньше или равно числу процессоров и несколько задач физически выполняются одновременно)

static void ExtractAppDomainHostingThread()
{ // Получить AppDomain, в котором работает текущий поток.

AppDomain ad = Thread.GetDomain();
}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: