Разъяснение MVVM: Что принадлежит в ViewModel, что принадлежит в Модель?

Таким образом, я изучал MVVM снова через какое-то время, где я действительно не следовал за новыми разработками, и я заметил, что сумма учебных руководств/руководств и т.д. выросла значительно. Однако большинству реализаций примеров/примера MVVM недостает для объяснения чего-то, что это не действительно ясно мне. Все эти примеры довольно просты, и ни один из них не читает что-то, формируют базу данных/файл/и т.д.

Теперь, например, у меня есть некоторое подобное краске приложение, и я сохраняю рисование в XAML. Что принадлежит в ViewModel, что принадлежит в Модель?

Модель предоставляет функции для загружения/сохранения рисования из файла XAML?

ViewModel связывает со свойствами, которые Модель представляет (Цвет, Ширина, Положение и т.д.)?

Проверка происходит в Модели или в ViewModel?

9
задан chrischu 17 February 2010 в 19:39
поделиться

1 ответ

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

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

Изменить: извините, пропущена часть, где perlfunc говорит, что они могут быть недоступны в системах, отличных от Unix, и на самом деле, fcntl недоступен в win32. Существует библиотека IO:: Socket, которую вы можете использовать, чтобы сделать правильные вещи в Windows, хотя.

Вот пример кода, который работает для меня (на linux в любом случае):

 # !/usr/bin/perl

использовать IO:: Socket:: INET;
использовать IO:: Select;

$ sock = IO:: Сокет:: INET- > новый ('PeerAddr' = > 'lossy.host.com',
'PeerPort' => 80,
'Блокирование' => 0);

$ sel = IO:: Select- > новый ($ носок);

@ writs = $ sel- > can _ write (10);

если ($ сокет - > подключен) {
печать «сокет подключен\n»;
} остальное {
печать «сокет не подключен\n»;
$ сок- > закрыть;
} 
-121--5086431-

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

У меня был некоторый успех с javascript API, который Facebook публикует и поддерживает. Несмотря на то, что документация может быть не всегда актуальной, я обнаружил, что я всегда находился на расстоянии от правильной реализации (требуется одно или два изменения).

-121--1308122-

ViewModel представляет модель, подходящую для используемой технологии представления.

В вашем примере я полагаю, что Модель не будет обеспечивать функции для загрузки/сохранения картин из/в файл XAML. Это будет выполняться в объекте/репозитории доступа к данным, который будет вызван ViewModel, принимая экземпляры модели в качестве входных данных. Этот бит часто является переменным и зависит от того, как выглядят ваши классы Model.

Сама ViewModel обычно не использует привязку данных. Он просто открывает модель для представления способом, который полезен для технологии представления (View). В случае WPF/Silverlight, что в основном означает, что он реализует интерфейс INotifyPropertyChanged.

Проверка обычно инициируется представлением (как и почти все), выполняемым в ViewModel, но часто делегируемым ViewModel модели. Конечно, лучше не повторять проверки на протяжении всего приложения. Лучшим местом для общих проверок является модель (см. IDataErrorInfo). Однако проверки, специфичные для ViewModel, могут обрабатываться непосредственно в ViewModel.

2
ответ дан 5 December 2019 в 02:07
поделиться
Другие вопросы по тегам:

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