Имея очень мало опыта в этой области, я пишу интеллектуальное клиентское приложение 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. Я вижу, что конвертер может работать, но я попытаюсь найти другое решение. Спасибо, Алекс