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


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


Шайтан

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

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

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

Не забывать кто кому и сколько должен.
...
Рейтинг: 0 / 0
Паттерн MVVM
    #36328921
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman S. Golubin http://msdn.microsoft.com/ru-ru/magazine/dd419663.aspx
после этого я смогу связать DataTable и DataGrid?
ток честно
...
Рейтинг: 0 / 0
Паттерн MVVM
    #36328949
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koJIo6okпосле этого я смогу связать DataTable и DataGrid?
ток честно
Не понял. Это ответ на вопрос ТС "где можно почитать на русском языке про основные конструкции". При чем тут DataTable и DataGrid?
...
Рейтинг: 0 / 0
Паттерн MVVM
    #36328964
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman S. Golubin,
а эта про что была? /topic/713538&pg=-1
сор за офтоп
...
Рейтинг: 0 / 0
Паттерн MVVM
    #36329013
GFX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Паттерн MVVM
    #36329048
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сравни диаграммы из соседней ветки.В MVP в отличии от MVVM, Presenter и View не разделены и содержат явные ссылки друг на друга(знают все,как говорит Роман), а это весьма неудобно.
...
Рейтинг: 0 / 0
Паттерн MVVM
    #36329137
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaСравни диаграммы из соседней ветки.В MVP в отличии от MVVM, Presenter и View не разделены и содержат явные ссылки друг на друга(знают все,как говорит Роман), а это весьма неудобно.
Кстати сказать, диаграмма MVP в соседней ветке - абсолютно не соответствует реальному MVP...
В том-то и основной "фикус-пикус" реального MVP, что он убирает все ненужные зависимости из тройки MVC и оставляет только то, что ему "лично" нужно для управления уровнем представления, а именно:
методы для обновления модели;

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

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


Шайтан
...
Рейтинг: 0 / 0
Паттерн MVVM
    #36329148
GFX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Паттерн MVVM
    #36329153
GFX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл написать что CurrentUser - это модель, статический объект
...
Рейтинг: 0 / 0
Паттерн MVVM
    #36329193
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GFXЗабыл написать что CurrentUser - это модель, статический объект
Реализаций MVP вагон и маленькая тележка.Есть такие,где у View есть ссылка на презентер или они содержат общий контекст
...
Рейтинг: 0 / 0
Паттерн MVVM
    #36329208
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaGFXЗабыл написать что CurrentUser - это модель, статический объект
Реализаций MVP вагон и маленькая тележка. Есть такие,где у View есть ссылка на презентер или они содержат общий контекст
Только такие т.н. "реализации" неправильно называть MVP - ибо: "как вы яхту назовете..." (с).

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

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

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


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

З.Ы. названия паттернам, в частности, придумали еще и затем, чтобы не путаться в определениях реализаций, которых "вагон и маленькая тележка"...
Эти названия придумал не я,посмотри у Фаулера.Задачи и вкусы бывают разные.Для одних их правильно совершенно не совпадает с правильностью других
...
Рейтинг: 0 / 0
Паттерн MVVM
    #36329228
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ Лично для меня,более удобоваримый и гибкий вариант с общим контекстом, а не с интерфейсами
...
Рейтинг: 0 / 0
Паттерн MVVM
    #36329290
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Паттерн MVVM
    #36329366
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настоящий или ненастоящий мало интересно,поскольку с 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
Паттерн MVVM
    #36329383
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qu-qu
Проблема паттернов в их модности.
Мне спустили сверху требование реализовать MVP. И когда я говорил, что в нашей ситуации ему не будет применения - довод был - у всех, значит есть применение, а у нас - нету? Мы что, типа, не люди что ли? Давай, делай!

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

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

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

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

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


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