在该领域几乎没有经验,我正在编写一个 WPF 智能客户端应用程序,使用 MVVM 与 WCF 后端通信,并且我真的很难从所有信息中做出正确的决定。这让我想到了一系列问题,我希望在这方面更有经验的人可以在这里解决这些问题。
例如,其中一个屏幕将允许输入订单并向订单添加订单行。
什么用作模型?
在 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 或类似方法实现的模型吗?还是应该直接在 ViewModel 中将 DTO 用作模型?
视图模型之间的通信
目前,我有一个带有 2 个选项卡(Order
和OrderLines
)的订单视图,其中包含 ViewModelsOrderViewModel
和OrderLineViewModel
. 在订单选项卡上,我有一个ComboBox
包含客户 ID 和名称的内容。当我在 上选择客户时OrderView
,我需要告知OrderLineView
客户已被选择,以便ComboBox
仅显示属于该客户的产品。
问题
在这种情况下如何与OrderViewModel
通信OrderLineViewModel
?
添加订单行并应用逻辑/业务规则
由于服务器级应用程序将被多个客户端(例如 PC、移动设备)使用。我想确保在服务器级应用程序中应用所有业务规则。例如,添加订单行时。如果是某种产品类型,则只有在客户具有某种认证的情况下才能添加。
然而,我所读到的关于 MVVM 的所有内容都表明该模型是适用于业务规则和行为的——所有这些示例都在客户端实现了该模型。理想情况下,我不想在客户端和服务器上重复相同的检查,所以我想知道如何确保不会发生这种情况。
问题
您是否允许用户添加无效行,将请求发送到服务器,让服务器应用相关规则并返回响应?或者在将请求发送到服务器之前,您是否以某种方式在智能客户端应用程序中应用逻辑?
我真的想在我在这里概述的所有领域都变得更好,我提前感谢您的任何回复。
谢谢
亚历克斯
编辑: 感谢大家的贡献,因为它帮助我在最佳前进方向方面变得更加清晰。所有的答案都很好,但我决定接受 Uri 的答案,因为它最符合我现阶段的想法。但是,我仍然不确定处理从 DTO 的 Id 到 ItemsSource 中的 SelectedItem 的转换的最佳方法,ItemsSource 是 ViewModel 的列表。我可以看到转换器可能会工作,但我会尝试寻找另一种解决方案。谢谢亚历克斯