Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Паттерн MVVM / 25 сообщений из 65, страница 1 из 3
24.11.2009, 15:29
    #36328660
GFX
GFX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
Добрый день господа.
Объясните мне пожалуйста, почему паттерн MVVM плотно используется в WPF?
Можно или нужно ли его использовать в WinForms?
А так же где можно почитать на русском языке про основные конструкции этого паттерна:
Model, View, ViewModel, Controller. (Примеров полно, а вот детального описание взаимодействие не могу найти :( )
...
Рейтинг: 0 / 0
24.11.2009, 15:53
    #36328755
Шайтан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
в соседней ветке /topic/713538&pg=-1


Шайтан
...
Рейтинг: 0 / 0
24.11.2009, 16:04
    #36328795
GFX
GFX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
Шайтанв соседней ветке /topic/713538&pg=-1


Шайтан

В этой ветке я ни нашел ни один ответ на мои вопросы.
...
Рейтинг: 0 / 0
24.11.2009, 16:21
    #36328860
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
...
Рейтинг: 0 / 0
24.11.2009, 16:30
    #36328894
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
Используется он по одной простой причине - отделить логику от предстваления.Это значительно упрощает написание и тестирование.View не должно содержать кода, а ViewModel напрямую общаться с контролами.В WPF/SL это решается очень просто,в WinForms для реализации ICommand нужны специальные адаптеры и пляски с бубнами, а без него особого смысла нет.
MVVM with WPF, Silverlight, and… Windows Forms в этой статье хорошо показано насколько в WinForms больше кода

Статья на русском была в msdn magazine.
...
Рейтинг: 0 / 0
24.11.2009, 16:30
    #36328895
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
Вот еще интересно написано, правда не по-русски :)

http://stackoverflow.com/questions/1153147/one-sentence-explanation-to-mvvm-in-wpf/1153246#1153246
...
Рейтинг: 0 / 0
24.11.2009, 16:32
    #36328903
fulltime4wd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
мантру повторять 128 раз перед сном ежедневно

Не забывать кто кому и сколько должен.
...
Рейтинг: 0 / 0
24.11.2009, 16:36
    #36328921
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
Roman S. Golubin http://msdn.microsoft.com/ru-ru/magazine/dd419663.aspx
после этого я смогу связать DataTable и DataGrid?
ток честно
...
Рейтинг: 0 / 0
24.11.2009, 16:44
    #36328949
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
koJIo6okпосле этого я смогу связать DataTable и DataGrid?
ток честно
Не понял. Это ответ на вопрос ТС "где можно почитать на русском языке про основные конструкции". При чем тут DataTable и DataGrid?
...
Рейтинг: 0 / 0
24.11.2009, 16:47
    #36328964
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
Roman S. Golubin,
а эта про что была? /topic/713538&pg=-1
сор за офтоп
...
Рейтинг: 0 / 0
24.11.2009, 16:58
    #36329013
GFX
GFX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
SeVaИспользуется он по одной простой причине - отделить логику от предстваления.Это значительно упрощает написание и тестирование.View не должно содержать кода, а ViewModel напрямую общаться с контролами.В WPF/SL это решается очень просто,в WinForms для реализации ICommand нужны специальные адаптеры и пляски с бубнами, а без него особого смысла нет.
MVVM with WPF, Silverlight, and… Windows Forms в этой статье хорошо показано насколько в WinForms больше кода

Статья на русском была в msdn magazine.

Для WinForms чтобы отделить логику от представления я использую Model-View-Presenter.
Почему MVP не используют в WPF? Ведь тоже самое - отделение логики.

Или мне надо было задать вопрос по другому: чем отличаются MVP от MVVM (основные концептуальные отличия интересует)?

Спасибо.


2Roman S. Golubin Спасибо, я эту же статью до Вашего ответа на английском читал :)
...
Рейтинг: 0 / 0
24.11.2009, 17:09
    #36329048
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
Сравни диаграммы из соседней ветки.В MVP в отличии от MVVM, Presenter и View не разделены и содержат явные ссылки друг на друга(знают все,как говорит Роман), а это весьма неудобно.
...
Рейтинг: 0 / 0
24.11.2009, 17:38
    #36329137
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
SeVaСравни диаграммы из соседней ветки.В MVP в отличии от MVVM, Presenter и View не разделены и содержат явные ссылки друг на друга(знают все,как говорит Роман), а это весьма неудобно.
Кстати сказать, диаграмма MVP в соседней ветке - абсолютно не соответствует реальному MVP...
В том-то и основной "фикус-пикус" реального MVP, что он убирает все ненужные зависимости из тройки MVC и оставляет только то, что ему "лично" нужно для управления уровнем представления, а именно:
методы для обновления модели;

методы для обновления "вью";

события от "вью" на пользовательские действия.
При этом - ни модель, ни "вью" не обязаны ничего знать о том, что они с кем-то там "взаимодействуют"...
...
Рейтинг: 0 / 0
24.11.2009, 17:40
    #36329142
Шайтан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
GFXИли мне надо было задать вопрос по другому: чем отличаются MVP от MVVM (основные концептуальные отличия интересует)?как раз в указанной мной теме эти диаграммы и приведены


Шайтан
...
Рейтинг: 0 / 0
24.11.2009, 17:42
    #36329148
GFX
GFX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
SeVaСравни диаграммы из соседней ветки.В MVP в отличии от MVVM, Presenter и View не разделены и содержат явные ссылки друг на друга(знают все,как говорит Роман), а это весьма неудобно.

Не согласен.
View ни чего не знает про Presenter.

View всего лишь реализует интерфейс, который передается в Presenter.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
public partial class UserView : Form,IUserView
    {
       
        public UserView()
        {
            InitializeComponent();
        }

        #region Реализация IUserView
        
        public string UserID
        {
            get { return this.UserIDTextBox.Text; }
            set { this.UserIDTextBox.Text = value; }
        }

        public string UserName
        {
            get { return this.UserNameTextBox.Text; }
            set { this.UserNameTextBox.Text = value; }
        }
        

        public event EventHandler SendActionEvent;        
        #endregion

        private void SendActionButton_Click(object sender, EventArgs e)
        {
            if (SendActionEvent != null)
            {                
                SendActionEvent(sender, e);               
            }
        }
    }

типа вот так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class UserPresenter
    {
        private IUserView _view;             

        public UserPresenter(IUserView view)
        {
            _view = view;
            _view.SendActionEvent += new EventHandler(_view_SendActionEvent);
            RefreshView();
        }

        void _view_SendActionEvent(object sender, EventArgs e)
        {
            CurrentUser.SendAction(_view.UserID, _view.UserName);
        }

        private void RefreshView()
        {                        
            _view.UserID = CurrentUser.UserID;
            _view.UserName = CurrentUser.UserName;
        }
    }
...
Рейтинг: 0 / 0
24.11.2009, 17:44
    #36329153
GFX
GFX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
Забыл написать что CurrentUser - это модель, статический объект
...
Рейтинг: 0 / 0
24.11.2009, 17:55
    #36329193
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
GFXЗабыл написать что CurrentUser - это модель, статический объект
Реализаций MVP вагон и маленькая тележка.Есть такие,где у View есть ссылка на презентер или они содержат общий контекст
...
Рейтинг: 0 / 0
24.11.2009, 18:02
    #36329208
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
SeVaGFXЗабыл написать что CurrentUser - это модель, статический объект
Реализаций MVP вагон и маленькая тележка. Есть такие,где у View есть ссылка на презентер или они содержат общий контекст
Только такие т.н. "реализации" неправильно называть MVP - ибо: "как вы яхту назовете..." (с).

З.Ы. названия паттернам, в частности, придумали еще и затем, чтобы не путаться в определениях реализаций, которых "вагон и маленькая тележка"...
...
Рейтинг: 0 / 0
24.11.2009, 18:07
    #36329218
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
qu-quSeVaСравни диаграммы из соседней ветки.В MVP в отличии от MVVM, Presenter и View не разделены и содержат явные ссылки друг на друга(знают все,как говорит Роман), а это весьма неудобно.
Кстати сказать, диаграмма MVP в соседней ветке - абсолютно не соответствует реальному MVP...
В том-то и основной "фикус-пикус" реального MVP, что он убирает все ненужные зависимости из тройки MVC и оставляет только то, что ему "лично" нужно для управления уровнем представления, а именно:
методы для обновления модели;

методы для обновления "вью";

события от "вью" на пользовательские действия.
При этом - ни модель, ни "вью" не обязаны ничего знать о том, что они с кем-то там "взаимодействуют"...


"Фикус-пикус" MVVM cостоит в том, что самые неудобные методы для обновления View полностью убираются.Пишутся базовые наборы ViewModel(конкретные реализации явно в отдельных классах можно и не создавать,а вытаскивать их через DI) и все.Остается только прописать бизнес-логику в отдельных сущностях.Все упрощается на порядки.
...
Рейтинг: 0 / 0
24.11.2009, 18:10
    #36329227
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
qu-quSeVaGFXЗабыл написать что CurrentUser - это модель, статический объект
Реализаций MVP вагон и маленькая тележка. Есть такие,где у View есть ссылка на презентер или они содержат общий контекст
Только такие т.н. "реализации" неправильно называть MVP - ибо: "как вы яхту назовете..." (с).

З.Ы. названия паттернам, в частности, придумали еще и затем, чтобы не путаться в определениях реализаций, которых "вагон и маленькая тележка"...
Эти названия придумал не я,посмотри у Фаулера.Задачи и вкусы бывают разные.Для одних их правильно совершенно не совпадает с правильностью других
...
Рейтинг: 0 / 0
24.11.2009, 18:12
    #36329228
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
ЗЫ Лично для меня,более удобоваримый и гибкий вариант с общим контекстом, а не с интерфейсами
...
Рейтинг: 0 / 0
24.11.2009, 18:41
    #36329290
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
SeVaqu-quSeVaСравни диаграммы из соседней ветки.В MVP в отличии от MVVM, Presenter и View не разделены и содержат явные ссылки друг на друга(знают все,как говорит Роман), а это весьма неудобно.
Кстати сказать, диаграмма MVP в соседней ветке - абсолютно не соответствует реальному MVP...
В том-то и основной "фикус-пикус" реального MVP, что он убирает все ненужные зависимости из тройки MVC и оставляет только то, что ему "лично" нужно для управления уровнем представления, а именно:
методы для обновления модели;

методы для обновления "вью";

события от "вью" на пользовательские действия.
При этом - ни модель, ни "вью" не обязаны ничего знать о том, что они с кем-то там "взаимодействуют"...


"Фикус-пикус" MVVM cостоит в том, что самые неудобные методы для обновления View полностью убираются.Пишутся базовые наборы ViewModel(конкретные реализации явно в отдельных классах можно и не создавать,а вытаскивать их через DI) и все.Остается только прописать бизнес-логику в отдельных сущностях.Все упрощается на порядки.
Я не оспаривал "удобство" MVVM по сравнению с MVP (да и вообще, обсуждения MVVM пока не касался).
Я просто указал на факт, что вы в своем посте обсуждали преимущества MVVM над ненастоящим MVP (у которого M связана с V, а V связано с P, как на картинке Р. Голубина) - таких MVP не бывает, а если и бывают, то это уже не MVP...

З.Ы. "Фикус-пикус" MVVM cостоит в том, что самые неудобные методы для обновления View... заменяются "биндингом" через рефлексию... (т.к. другого "биндинга" в MS пока не придумали).
...
Рейтинг: 0 / 0
24.11.2009, 19:36
    #36329366
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
Настоящий или ненастоящий мало интересно,поскольку с MVP большая путанница,как и рефлексия в биндинге или нет.А вот скорость обновления в 60раз в секунду,которая стоит по умолчанию в SL, считаю черезмерной и ограничиваю 30.Такой скорости,как в SL у WinForms никогда не будет с любыми ухищраниями.
Гораздо больше волнует то,что подобных презентеров
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class UserPresenter
    {
        private IUserView _view;             

        public UserPresenter(IUserView view)
        
            _view = view;
            _view.SendActionEvent += new EventHandler(_view_SendActionEvent);
            RefreshView();
        }

        void _view_SendActionEvent(object sender, EventArgs e)
        {
            CurrentUser.SendAction(_view.UserID, _view.UserName);
        }

        private void RefreshView()
        {                        
            _view.UserID = CurrentUser.UserID;
            _view.UserName = CurrentUser.UserName;
        }
    }

создавать не нужно совсем, в 90% хватает базовых.
А все View содержат только конструктор.
...
Рейтинг: 0 / 0
24.11.2009, 19:47
    #36329383
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
qu-qu
Проблема паттернов в их модности.
Мне спустили сверху требование реализовать MVP. И когда я говорил, что в нашей ситуации ему не будет применения - довод был - у всех, значит есть применение, а у нас - нету? Мы что, типа, не люди что ли? Давай, делай!

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

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

И еще нигде - вообще и в принципе - не возникла не то что необходимость, а даже возможность использовать какой-либо презентер для другого View...
Зато - ПАТТЕРН! МВП!

Такой вот крик души.

Тем более что "байндинг" - действительно через рефлексию и у "Инфраджистиков" тоже.
...
Рейтинг: 0 / 0
24.11.2009, 20:38
    #36329459
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн MVVM
Это не проблема MVP, а отсутствие системного слоя.Посмотрите,как реализован подобный паттерн в Cabana у IdeaBlade на базе SCSF.5-6 базовых View&Presenter, наследуясь от них можно получить реальную экономию в коде,если не задумыватся о спичках в виде binding'a c рефлексией. Но в WinForms подобные получаются довольно увесистыми, а без них - с шашками на танки.
А биндинг в WPF позволяет забыть про все эти страсти.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Паттерн MVVM / 25 сообщений из 65, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]