我的用户可以删除DataGrid中的多个实体。 我应该在customerService类中创建一个DeleteCustomer方法
喜欢
演示/视图模型:
public void DeleteCustomers()
{
foreach(...SelectedCustomers)
{
customerService.DeleteCustomer(item);
}
}
或
public void DeleteCustomers()
{
customerService.DeleteCustomers(SelectedCustomers);
// The DataProvider is enumerating the list...
}
您认为哪种更好?
答案 0 :(得分:1)
你已经自己回答了这个问题。在删除单个客户时,请致电:
customerService.DeleteCustomer(item);
这表明您将要删除的项目传递回服务(这实际上是对如何处理客户的特定方式的抽象)。 您明确表示该服务最了解如何执行此操作。
为此,删除多个客户应该像后一个选项:
customerService.DeleteCustomers(SelectedCustomers);
你在这里获得了一些好处:
答案 1 :(得分:0)
为什么DataProvider不应该枚举IEnumerable<T>
?如果没有,只需使用第二种方式,让DataProvider处理它。
答案 2 :(得分:0)
我会选择第二个,因为这显然会暴露你想要做的事情。
答案 3 :(得分:0)
我会有两种方法......如果你只需要在某个时候删除一个客户,那就讨厌将一个实例包装在IEnumerable中
答案 4 :(得分:0)
通常在客户端 - 服务器方案中,您希望最小化往返次数。
显然这意味着在单独枚举集合和删除之间,并立即删除集合之后,后者是更好的选择。
然而作为替代方案,为了进一步减少通信,您可以收集集合中的突变(添加,删除,替换等等),并且仅当用户按下“保存”时,才调用该服务并发送一组更改。