Здравствуйте, IB, Вы писали:
IB>Да, там его переименовали в ViewModel... =) Когда контроллер не реализуется в принципе — это паттерн DocumentView. Там логика контроллера реализуется во View, что затрудняет тестирование и обладает рядом других недостатков...
Всетаки ViewModel это не совсем контроллер-презентер. Я бы сказал так — ViewModel можно привести к виду презентера, но это только частный случай. Модифицируем
тот же примерАвтор(ы): Иван Бодягин
Дата: 25.07.2006
В наше время сложно найти разработчика, который не слышал бы о паттерне под названием Model-View-Controller или сокращенно MVC, что вообщем не удивительно, с задачей отделения данных от их представления сталкиваешься практически на каждом проекте. Однако, как ни странно, столь же сложно найти разработчика, который действительно четко себе представляет, что такое на самом деле паттерн MVC и как его можно реализовать в конкретной ситуации. Основная причина такой неоднозначности в том, что по историческим причинам данной аббревиатурой принято называть не один единственный паттерн, а целое семейство паттернов, призванное отделять представление от модели. Произошло это в силу разных обстоятельств. Отчасти из-за того что MVC не просто паттерн, а довольно объемное архитектурное решение, в котором каждый новый разработчик видел что-то свое и ставя во главу угла особенности своего проекта, реализовывал его по своему. Отчасти же из-за возраста данного паттерна, во времена его изобретения и сами приложения, и графические интерфейсы были существенно беднее чем в наше время, с тех пор они сильно эволюционировали и вместе с ними изменялся и сам паттерн. Данная статья посвящена также одному из паттернов входящих в это семейство, причинам его появления, особенностям применения, преимуществам и недостаткам, а так же описанию сопутствующих паттернов.
.
public class Model : INotifyPropertyChanged
{
private double _valueFahrenheit = 32;
private double _valueCelsius = 0;
public event PropertyChangedEventHandler PropertyChanged;
public double valueFahrenheit
{
get { return _valueFahrenheit; }
set
{
_valueFahrenheit = value;
_valueCelsius = (_valueFahrenheit - 32) * 5 / 9;
NotifyPropertyChanged("valueFahrenheit");
}
}
public double valueCelsius
{
get { return _valueCelsius; }
set
{
_valueCelsius = value;
_valueFahrenheit = _valueCelsius * 9 / 5 + 32;
NotifyPropertyChanged("valueCelsius");
}
}
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
где-то в XAML
<DataTemplate DataType=src:Model>
<TextBlock Text={Binding valueFahrenheit}/>
... и так далее
</DataTemplate>
Больше не нужно ничего — всю черновую работу сделает фреймворк. Класс Model здесь — это и ViewModel и DataModel одновременно. Пример, конечно примитивный, но думаю, суть понятна.