Проблемы с пониманием использования MVVM при использовании WCF DTO в интеллектуальном клиентском приложении WPF

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

Например, на одном из экранов можно будет ввести заказ и добавить строки заказа к заказу.

Что используется в качестве модели?

В службе WCF у меня есть следующий упрощенный DTO:

public OrderDTO
{
   string orderDetails { get; set; }
   List<OrderLineDTO> OrderLines { get; set; }
}

public OrderLineDTO
{
   int customerId { get; set; }
   int productId { get; set; }
   double quantity { get; set; }
}

И служба WCF, которая имеет следующий метод:

public OrderService Order
{
    CreateOrderResponse CreateOrder(OrderDTO order) 
}

В моем интеллектуальном клиенте WPF у меня есть ссылка к DTO, но очевидно, что он не реализует INotifyPropertyChanged , поскольку он предназначен исключительно для транспорта.

Вопросы

Рекомендуется ли преобразовать эти DTO в модель, реализующую INotifyPropertyChanged с использованием Automapper или подобного? Или DTO следует использовать в качестве модели непосредственно во ViewModel?

Обмен данными между моделями представления

В настоящее время у меня есть представление заказа с двумя вкладками ( Order и OrderLines ) с моделями просмотра OrderViewModel и OrderLineViewModel . На вкладке заказа у меня есть ComboBox , содержащий идентификаторы и имена клиентов. Когда я выбираю клиента в OrderView , мне нужно сообщить OrderLineView , что клиент был выбран, чтобы в ComboBox отображались только продукты, принадлежащие этому клиенту. .

Вопросы

Как OrderViewModel будет взаимодействовать с OrderLineViewModel в этом сценарии?

Добавление строки заказа и применение логики / бизнес-правил

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

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

Вопросы

Разрешаете ли вы пользователю добавлять недопустимую строку, отправлять запрос на сервер, позволять серверу применять соответствующие правила и возвращать ответ? Или вы каким-то образом применяете логику в приложении смарт-клиента перед отправкой запроса на сервер?

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

Спасибо

Alex

Редактировать: Спасибо всем за ваш вклад, так как он помог мне стать немного более ясным с точки зрения наилучшего пути вперед. Все ответы были хорошими, но я решил принять ответ Ури, поскольку он лучше всего соответствует моим мыслям на данном этапе. Однако я все еще не уверен, как лучше всего выполнить преобразование из идентификатора DTO в SelectedItem в ItemsSource, который представляет собой список ViewModels. Я вижу, что конвертер может работать, но я попытаюсь найти другое решение. Спасибо, Алекс

14
задан lostinwpf 3 February 2012 в 10:29
поделиться