Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

MVVM - pro & contra

565  1 2 3 все
AlexNek патриот04.11.17 16:04
AlexNek
NEW 04.11.17 16:04 
в ответ moose 04.11.17 13:24
я вам просто такую простую задачу нарисую

вообще то я попроще хотел найти, ну да ладно - поучите тогда меня WPFу

Задача вообще то совсем нетипичная для моей "среды обитания".

Я тогда нарисую пустой GUI, что бы была отправная точка.

#21 
  moose свой человек04.11.17 17:34
NEW 04.11.17 17:34 
в ответ AlexNek 04.11.17 16:04, Последний раз изменено 04.11.17 17:40 (moose)

если вы еще не работали с wpf, но хотите въехать, я бы порекомендовал прочитать/проработать эту книгу:


https://mehmetakifsonmez.files.wordpress.com/2013/12/wpf-4...


я эту редакцию еще не видел, сам учился по первому изданию, эту просто нагуглил специально для вас : )

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


https://www.codeproject.com/Articles/23772/WPF-A-Beginner-...


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

- мы не пытаемся менять/опрашивать наши данные из когда диалога

- мы не организовываем наши данные в угоду удобства их визуализации и вообще об их визуализации здесь ничего не знаем.

- для этого мы создаем нечто между гуи и данными, что знает обе стороны: с одной стороны это (в мввм это называется вью-модель) знает как огранизованы данные, с другой стороны содержит объекты, к которым вью может прицепиться binding.

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


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

#22 
AlexNek патриот04.11.17 17:35
AlexNek
NEW 04.11.17 17:35 
в ответ moose 04.11.17 13:24

ну вот проверьте

#23 
  moose свой человек04.11.17 17:50
NEW 04.11.17 17:50 
в ответ AlexNek 04.11.17 17:35

сорри, у меня только vs2010, поновей пока не прикупил : (

#24 
Murr патриот04.11.17 18:04
Murr
NEW 04.11.17 18:04 
в ответ moose 04.11.17 17:50

пока не прикупил : (

-----

Community версия у мелкомягких бесплатная...

#25 
dymanoid знакомое лицо04.11.17 18:19
dymanoid
NEW 04.11.17 18:19 
в ответ moose 02.11.17 21:35

Байндинги, конечно, хорошо, но не ими едиными. Без DataTemplate, ICommand и System.Windows.Interactivity весь MVVM был бы очень пресным.

#26 
AlexNek патриот04.11.17 19:05
AlexNek
NEW 04.11.17 19:05 
в ответ moose 04.11.17 17:50

https://www.visualstudio.com/vs/community/

2010 у меня уже давно нет. Ладно тогда ехешник закину. А код можно и так глянуть.

#27 
AlexNek патриот04.11.17 19:11
AlexNek
NEW 04.11.17 19:11 
в ответ moose 04.11.17 17:34
если вы еще не работали с wpf, но хотите въехать

Спасибо за заботу, гляну.

У меня стадия немного другая - я не знаю многих ньюансов и не делаю многое на "автомате".

Имелось в виду, что сделанный мной пример можно в WPF реализовать "правильнее" чем это сделал я.

#28 
  moose свой человек04.11.17 22:45
NEW 04.11.17 22:45 
в ответ AlexNek 04.11.17 17:35, Последний раз изменено 04.11.17 22:57 (moose)

я бы для эксперимента попроще держался. давайте заменим содержимое вашего grid на это:

(вставлю файл)

и, естественно, пару методов в code behind добавим:

(вставлю файл)

вот кнопочки уже и перекрашиваются. примитивным образом. для "одноразовых" задач - сойдет, но я бы не непосредственно цвет менял, а сделал бы производную кнопку, добавил ей dependency property "isSelected", и в стиль вставил триггер, который бы выбирал цвет в зависимости от значения.


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


кстати, если сразу настроиться, что "мввм для впф - эакон", то нужно начинать углубляться, строить модель, куда помещать данные (видимо, некий набор выбранных значений), создавать вьюмодель, где имплементировать некие объекты, к которым можно было бы прицепить состояние кнопок, и команды, к которым прицепить свойство Command от кнопок, и убрать нафиг button_click и прочее из кода окна. все переедет во вьюмодель, будем в Execute() ловить, которая кнопка нажата и проставлять по правилам свойства у объектов, к которым привязаны свойства isSel & IsEnabled всех кнопок.

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


шайсе! не знал, что квота все выравнивает влево : ( сейчас, если разбурусь, как аттачить файлы, прицеплю...

#29 
  moose свой человек04.11.17 22:58
NEW 04.11.17 22:58 
в ответ moose 04.11.17 22:45
  moose свой человек04.11.17 22:59
NEW 04.11.17 22:59 
в ответ moose 04.11.17 22:58
AlexNek патриот04.11.17 23:22
AlexNek
NEW 04.11.17 23:22 
в ответ moose 04.11.17 22:45

А нельзя ли выложить полный 2010 проект?

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

Но вообще то, как и ожидал, все закинулось в одну кучу. Естественно, что в этом случае никакие "нормальные" паттерны не помогут. Дело в том что я/мы так не делаем никогда.

Ну и нагружать вьюв "хамловской логикой" я лично просто ненавижу, возможно сказывается дурное воспитание винформс. смущ


#32 
dymanoid знакомое лицо04.11.17 23:45
dymanoid
NEW 04.11.17 23:45 
в ответ moose 04.11.17 22:45

Не надо делать производных кнопок. Attached property в помощь.

#33 
  moose свой человек05.11.17 09:57
NEW 05.11.17 09:57 
в ответ AlexNek 04.11.17 23:22
Дело в том что я/мы так не делаем

а вы подумали, что я так делаю? я так сделал, чтобы показать, что такое "в лоб".


#34 
  moose свой человек05.11.17 10:46
NEW 05.11.17 10:46 
в ответ AlexNek 04.11.17 23:22
ничего вообще не компилируется.

причина где-то в хамл-коде.

#35 
  moose свой человек05.11.17 10:48
NEW 05.11.17 10:48 
в ответ dymanoid 04.11.17 23:45

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

#36 
dymanoid знакомое лицо05.11.17 12:59
dymanoid
NEW 05.11.17 12:59 
в ответ moose 05.11.17 10:48

Весь смысл attached property в том, чтобы добавлять свойства классам без создания их наследников. Если вдруг понадобится свойство IsSelected присобачить другим элементам, то в случае с attached property ничего делать больше не надо - класс-то готов уже. А по вашему варианту придётся создавать наследников для всех этих элементов.

#37 
AlexNek патриот05.11.17 14:58
AlexNek
NEW 05.11.17 14:58 
в ответ moose 05.11.17 09:57
я так сделал, чтобы показать, что такое "в лоб".

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

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


Давайте тогда свой "старт", будет интересно глянуть.

#38 
AlexNek патриот05.11.17 15:08
AlexNek
NEW 05.11.17 15:08 
в ответ moose 05.11.17 10:46
причина где-то в хамл-коде.

не думаю, хамл то без проблем открывается в дизайнере студии. Единственный способ, который нашел раньше. Переименовать старый файл, создать новый с требуемым именем и все туда перенести со старых.

Я вот так и не понял, как бороться с подобной ситуацией, делаешь, что то то делаешь, а после хамл не грузится - кричит давай проект перекомпилируй. Приходится пол хамла комментировать (иногда копировать куда то), компилировать, а после восстанавливать.

Что то явно со студией. Сегодня десяток раз вылетала на открытии "попорченного" проект, а теперь и вовсе не хочет грузится. Счас пробую переинталлировать.


Кстати, пока не смог решить проблему с изменением цвета кнопки после нажатия. То бишь цвет кнопки то меняется, НО только после того как мышка уйдёт с данной кнопки. Хотелось бы чтобы цвет изменился сразу после нажатия кнопки мышки (уже и с триггером пробовал, всё равно не получается). Где нахомутал пока не понял.

#39 
  moose свой человек05.11.17 18:39
NEW 05.11.17 18:39 
в ответ AlexNek 05.11.17 15:08
Кстати, пока не смог решить проблему с изменением цвета кнопки после нажатия. То бишь цвет кнопки то меняется, НО только после того как мышка уйдёт с данной кнопки.

для этого я вам кусок кзэмыла прицепил, где поменял стиль этих кнопок. верните назад, и кнопка перестанет реагировать на наведение мышью.


#40 
1 2 3 все