Одно объяснение предложения к MVVM в WPF?

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

Говорят с адвокатом о законе об интеллектуальной собственности и каковы Ваши легальные опции. "Открытый исходный код" не подразумевает, что "люди могут считать источник". Вместо этого Открытый исходный код является конкретным разрешения предоставления модели лицензирования, чтобы свободно использовать и изменить Ваш код. Если Вы не выдаете такую лицензию тогда, люди, копирующие Ваш код, находятся в нарушении, и (в большей части мира) у Вас есть легальные опции остановить их.

единственный способ, которым можно действительно защитить код, не состоит в том, чтобы поставить его. Переместите важную серверную сторону кода и имейте Ваш общедоступный код JavaScript, делают вызовы Ajax к нему.

См. мой полный ответ о obfuscators здесь.

35
задан Martin Harris 20 July 2009 в 12:05
поделиться

10 ответов

Объяснение одним предложением:

MVVM - это переосмысление хорошо известного шаблона Model-View-Presenter (MVP), который особенно хорошо работает со средствами привязки данных, поставляемыми с WPF для разделения приложений. логика из дизайна пользовательского интерфейса.

Более подробное и полезное объяснение:

Основная концепция MVVM - это разделение приложения WPF на отдельные компоненты, каждый из которых несет одну ответственность в процессе получения информации на экране.

Во-первых, у вас есть модель. Это класс с очень ограниченной функциональностью, который обычно заполняется из какого-либо внешнего источника, такого как база данных или веб-сервис. Например:

public class MessageModel
{
    public string Message { get; set; }
}

Вдобавок к этому вы накладываете ViewModel, это то место, где находится логика приложения, она уведомляет представление об изменениях в модели и обеспечивает согласованность данных. Благодаря реализации интерфейса INotifyPropertyChanged двусторонняя привязка данных между ViewModel и представлением предоставляется бесплатно WPF:

public class MessageViewModel : INotifyPropertyChanged
{
     private MessageModel _model;

     public string Message
     {
          get { return _model.Message; }
          set
          {
              if (_model.Message != value)
              {
                  _model.Message = value;
                  OnPropertyChanged("Message");
              }
          }
     }
}

Наконец, у вас есть View. Это файл xaml, описывающий структуру элементов управления, используемых для отображения и редактирования данных в ViewModel:

<Canvas>
     <TextBox Text={"Binding Message"} />
</Canvas>

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

74
ответ дан 27 November 2019 в 06:24
поделиться

Одно предложение? Поехали.

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

14
ответ дан 27 November 2019 в 06:24
поделиться

Простое утверждение, которое помогло мне лучше понять это, было «Могу ли я провести модульное тестирование своей бизнес-логики без пользовательского интерфейса?» Я думаю, это должен быть вопрос, который вы должны задать при изучении и проектировании с использованием концепций MVVM.

8
ответ дан 27 November 2019 в 06:24
поделиться

На этом сайте есть отличная схема, объясняющая это.

В основном у вас есть 3 компонента:
1) Модель - модель данных вашего приложения. это довольно стандартно и аналогично любому приложению MVP или MVC.
2) Представление - XAML, который определяет представление / макет вашего приложения.
3) Модель представления - поскольку WPF требует, чтобы представление прикреплялось к вещам определенным образом (например, требует, чтобы коллекции реализовывали INotifyCollectionChanged и тому подобное), обычно требуется, чтобы вы немного массировали свои данные, чтобы получить их. форма, подходящая для отображения. Здесь код модели представления. Он упаковывает данные в модели представления, которые представление может легко отобразить. Это то, к чему будет привязано ваше представление XAML. Он должен реагировать на события уровня модели и обновлять себя.

(Тогда ваши контроллеры висят где-нибудь сбоку - в идеале с помощью команд WPF - и вносят изменения в модель, которые запускают события для обновления модели представления)

4
ответ дан 27 November 2019 в 06:24
поделиться

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

1
ответ дан 27 November 2019 в 06:24
поделиться

Я бы сказал что-то вроде: «Шаблон представления для разделения проблем между пользовательским интерфейсом и его логикой»

0
ответ дан 27 November 2019 в 06:24
поделиться

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

1
ответ дан 27 November 2019 в 06:24
поделиться

Улучшенный ответ:

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

Фактически, MVVM - это усовершенствование шаблона, который существует уже некоторое время. Я помню, как менял паттерн, когда я работал в MFC. Для этого есть как минимум две причины. MFC или <> довольно сложен, и смешивание конструкций MFC с логикой вашего приложения делает приложение нестабильным. Пример:

0
ответ дан 27 November 2019 в 06:24
поделиться

Уже есть несколько действительно хороших объяснений в одно предложение (или близких к нему). Я просто добавлю к этому, сказав, что если вы прошли базовый уровень и вам нужен пример использования MVVM в реальном приложении, которое имеет меню, панель инструментов, диалоговые окна параметров, окна инструментов для закрепления и т. Д. взгляните на SoapBox Core и эту демонстрацию с использованием SoapBox Core . Его исходный код открыт, поэтому вы можете получить множество идей.

0
ответ дан 27 November 2019 в 06:24
поделиться

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

Теперь замените «звездочку» на «ViewModel» и «веер» на «View» и прочтите это еще раз.

39
ответ дан 27 November 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: