我在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
,因为它纯粹是用于传输。
问题
推荐的方法是使用Automapper或类似工具将这些DTO转换为实现 INotifyPropertyChanged
的模型吗?还是应该直接在ViewModel中使用DTO作为模型?
视图模型之间的通信
目前,我有一个包含2个选项卡(Order
和OrderLines
)的订单视图,其中包含ViewModels OrderViewModel
和OrderLineViewModel
。 在订单选项卡上,我有一个包含客户ID和名称的ComboBox
。 当我在 OrderView
中选择一个客户时,我需要通知OrderLineView
已选择一个客户,以便 ComboBox
仅显示属于该客户的产品。
问题
在这种情况下,OrderViewModel
如何与OrderLineViewModel
通信?
添加订单行和应用逻辑/业务规则
由于服务器级别的应用程序将被多个客户端使用,例如PC,移动设备等,我想确保所有业务规则都应用于服务器级别的应用程序。 例如,当添加订单行时。 如果它是某种产品类型,则只有在客户具有某种认证时才能添加。
然而,我阅读的有关MVVM的所有内容都指出模型是应用业务规则和行为的地方- 所有这些示例都在客户端上实现了模型。 理想情况下,我不希望在客户端和服务器上重复相同的检查,因此我想知道如何确保这种情况不会发生。
问题
您是否允许用户添加一个无效行,将请求发送到服务器,让服务器应用相关规则并返回响应? 还是在向服务器发送请求之前在智能客户端应用程序中应用逻辑?
我真的很想在我概述的所有领域中变得更好,并且提前感谢您的任何回答。
谢谢
Alex
编辑: 非常感谢大家的贡献,因为它们帮助我在某种程度上更加清晰地思考最佳方法。 所有答案都很好,但我决定接受Uri的答案,因为它最符合我现阶段的想法。 但是,我仍然不确定如何将DTO的ID转换为ItemsSource的SelectedItem,这是一个ViewModel列表。 我可以看到Converter可能有效,但我要尝试找到另一种解决方案。谢谢Alex