|
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
|
|
Разница в структурах MVC и MVVM на конкретном примере08.01.2015, 16:40. Показов 4560. Ответов 14
Метки нет (Все метки)
Всем привет. Люди в теории понимаю, как работает MVC, но не совсем понимаю разницы между MVC и MVVM. Смотрел ролики, читал ресурсы, но очень хотелось бы разобрать на конкретном примере. Вот я на WPF создаю игру Морской Бой. Поправьте, если я ошибаюсь. Для того чтобы следовать структуре MVC, я создаю три папки, главное окно идёт в View. Я создаю поле из 100 клеток, само поле - это тоже view. Но его данные, такие как количество клеток, длина, ширина, цвет - это уже данные, которые могут хранть в файле field.xml в папке Model, так? Когда я навожу мышкой на одну из клеток, то она меняет свой цвет, стало быть на событие мышки в файле этого поля который находится в папке View я вызываю метод ChangeColor, который написан уже в контроллере. То есть у меня есть gridModel, gridView и gridController. Правильно ли я понял структуру MVC? Если да, то какие изменения нужно сделать, чтобы получить структуру MVVM? Заранее спасибо.
0
|
|
| 08.01.2015, 16:40 | |
|
Ответы с готовыми решениями:
14
На конкретном примере связь MVC и MVVM. Трудно ли освоить mvc параллельно с изучением ASP.NET Маршрутизация на конкретном примере |
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
|
| 08.01.2015, 17:00 | |
|
биндинги брат. сила в биндингах.
0
|
|
|
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
|
|
| 08.01.2015, 17:44 [ТС] | |
|
Не могли бы показать на конкретном небольшом примере пожалуйста?
0
|
|
|
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
|
|
| 08.01.2015, 23:42 [ТС] | |
|
Спасибо большое. Реально помогло разобраться. Такой еще вопрос. Как лучше создавать Controls: через XAML или в cs файле? Мне очень нравится всё делать в cs файле, но везде, где не читаю литературу создают в XAML.
0
|
|
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
|
| 09.01.2015, 01:38 | |
|
А как больше нравится, так и делайте. WPF очень демократичен в этом плане.
PS: Примеры делают в XAML для наглядности и рекламы декларативного подхода.
0
|
|
|
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
|
|
| 09.01.2015, 01:52 [ТС] | |
|
Спасибо за ответ!
Сейчас читал информацию по этому поводу, и если честно, отчасти согласен с мнением, что, создание статических контролов и установка его свойств лучше делать в XAML, чтобы не забивать этой фигней сам cs файл. Но, с другой стороны, бегать туда-сюда из одного файла в другой как-то не очень, (в разных окнах у меня XAML и CS), возмонжо понравится работать с XAML, если появится второй монитор А вот еще вопрос, чисто личный: если вы реализуете интерфейс INotifyPropertyChanged, То описываете его в базовом класе модели или модели вида? Мне лично приглянулся первый вариант больше, потому что, если предположим, что если этот интерфейс реализован в модели вида, то, если свойство вдруг было изменено в самой модели, то как это передать-то в модель вида.
0
|
|
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
||
| 09.01.2015, 11:33 | ||
|
1
|
||
|
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
|
|
| 09.01.2015, 15:55 [ТС] | |
|
А вот еще вопрос. Разобрался, кстати, уже почти с MVVM. Пишу игру "Морской Бой". У меня есть модель Field - это игровое поле. Также есть всякие поля этого класса такие как Background, Width и так далее. В классе MainWindowViewModel я реализую логику создания этого поля, добавляю там клеточки и события мыши. И вот такой вопрос. В самой модели есть свойство типа bool, которое называется HideLegend и соответствующее ему поле hideLegend. У меня изначально был метод, который ищет TextBlock Control легенды и ставит ему visibility=hidden, когда я пишу HideLegend=true. А вопрос заключается вот в чём? Если свойство HideLegend находящееся в модели вызывает метод, то это ведь плохо для структуры MVVM? Все методы должны быть в соответствующем viewModel классе. И я могу реализовать этот метод в viewModel классе. Но мне тогда не будут нужно свойство HideLegend в самой модели. Но мне хотелось бы менять значение видимости легенды именно через свойство класса Field путём myField.HideLegend=true. В данном случае тогда и сам метод надо описывать тоже в классе модели, иначе получается путанница. Что делать?
0
|
|
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
|
| 09.01.2015, 17:45 | |
|
А зачем методы нужны? Забиндить visibility текстбокса на это булево поле и делов то...
0
|
|
|
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
|
|
| 09.01.2015, 17:52 [ТС] | |
|
Дело в том, что в конве (Canvas), на которую я рисую, находится блок текста (TextBlock). И когда я устанавливаю значение hideLegend=true, то там должен запуститься метод который ищет этот блок текста, а после того как найдёт, прячет его.
0
|
|
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
|
| 09.01.2015, 17:54 | |
|
Думаю это проблема архитектуры приложения, а не mvvm...
0
|
|
|
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
|
||||||
| 09.01.2015, 18:37 [ТС] | ||||||
|
модель
Блин, тогда ни черта не понимаю. В view у меня есть Canvas. Потом в ViewModel я создаю Canvas и добавляю в неё кучу Rectangle и Textblock, чтобы создать сетку, как в обычном морском бое. Делаю биндинг. У меня 100 квадратов в одном поле, мне что, каждый биндить к свойству hideLegend? Причём как забиндить-то, если hideLegend типа bool, а visibilty это вообще enum. Без метода не обойтись, куда его пихать. Ёмаё...
0
|
||||||
|
Неадекват
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
|
|
| 09.01.2015, 21:19 | |
|
Ваша модель - это ваше поле. Любое изменение поля == изменение модели. Для привязки логического значения к перечислению используют конвертеры.
1
|
|
|
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
|
|
| 09.01.2015, 22:16 [ТС] | |
|
Спасибо большое за помощь. Я многое узнал благодаря вам. Извините, если достал своими вопросами. Немного правда, еще неясно. Но я наверное создам новую тему по одному из этих вопросов. Еще раз, благодарю!
0
|
|
| 09.01.2015, 22:16 | |
|
Помогаю со студенческими работами здесь
15
Сравнение производительности С++ и С# на конкретном примере Линейный криптоанализ на конкретном примере Использование функции округления на конкретном примере Оптимальная реализация построения БД на конкретном примере Принцип работы цикла на конкретном примере Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|