Как мне реализовать MVVM с помощью WCF?

#mvvm

#mvvm

Вопрос:

Я новичок в MVVM. В настоящее время я разрабатываю проект WPF на C #, который будет иметь серверную часть SQl Server, и я буду использовать стандартную службу WCF для связи с ней. Кажется, что все учебные пособия, которые я видел на MVVM до сих пор, всегда используют какое-то статическое хранилище данных, такое как XML-файл, для их серверной части. Я еще не видел реализаций с использованием базы данных и уровня доступа к данным, поэтому я не понимаю, куда вписывается моя служба WCF. В службе определены все объекты данных, поэтому становится ли сама служба моделью? Кроме того, как мне включить службу в ViewModel, чтобы разработчик не выдал ошибку, в которой говорится, что он не может создать экземпляр класса service? Любая помощь здесь была бы очень признательна, поскольку я нахожу странным, что во многих руководствах по этой теме отсутствует наиболее практичная реализация для бизнес-приложения.

PS Я хотел бы держаться подальше от служб WCF RIA и Silverlight, поскольку отсутствие поддержки команд Silverlight делает книгу, за которой я следую (Pro WPF и Silverlight MVVM Эффективная разработка приложений с помощью Model-View-ViewModel), трудной для понимания.

Комментарии:

1. Если вы новичок в шаблоне MVVM, вам может помочь прочитать сообщение о том, как создавать фрагменты кода: rafapef.blogspot.com/2012/11/CodeSnipetInVisualStudio2012.html Потому что, скорее всего, вам придется вводить много свойств в ваши новые viewmodels. Надеюсь, это поможет.

Ответ №1:

Хорошо, я постараюсь ввести вас в курс дела…

Во-первых, я понимаю вопрос о модели и объектной модели, представленной с помощью WCF. Они одинаковые? Ну, я хотел бы сделать это предположение в настоящее время, для простоты. Значит, нам не нужна модельная часть MVVM на стороне клиента? Зависит …

ViewModel находится на водительском месте. Мы позволяем ему создавать прокси-сервер клиента для вашей службы WCF. Объекты, используемые в запросе и возвращаемые в качестве результата, создают вашу модель. Все, что вы хотите кэшировать на стороне клиента или что не может быть напрямую связано с пользовательским интерфейсом, будет помещено в свойства вашего класса контейнера модели. Создайте связываемые свойства из этих свойств модели для использования в вашем пользовательском интерфейсе. Все остальное будет просто прямыми свойствами в вашей модели представления.

Что касается WCF и уровня доступа к данным, необходимо отметить несколько важных моментов. Прежде всего, вам необходимо будет разделить вашу логическую (информационную) модель и вашу физическую модель (базу данных). Одна из причин заключается в том, чтобы абстрагировать технологию базы данных от вашего приложения. Другой, позволяющий допускать небольшие отклонения между логикой вашего приложения / домена и вашей физической реализацией. Убедитесь, что ваши классы модели (сущности) достаточно универсальны, чтобы поддерживать изменения в вашем пользовательском интерфейсе без необходимости изменять весь стек приложений для каждого изменения пользовательского интерфейса.

Трудно говорить об этом вопросе без четкого примера, поэтому в заключение я хотел бы пригласить вас взглянуть на http://aviadezra.blogspot.com/2010/10/silverlight-mvvm-odata-wcf-data.html . Я знаю, он использует службы передачи данных WCF и SilverLight. Не сердитесь на меня напрямую за то, что я указываю на этот образец, и дайте мне большой палец вниз. Это просто чертовски хороший пример того, чего вы хотите достичь, и что нужно внедрить, и что думать о настройке такого приложения. Просто замените Silverlight на WPF, а службы данных — на обычные типизированные контракты с данными, и остальная часть истории поможет прояснить ваши мысли.

Надеюсь, это поможет вам в ваших поисках!