0

我的用户可以删除 DataGrid 中的多个实体。我现在应该在我的 customerService 类中创建一个 DeleteCustomer 方法吗

演示者/视图模型:

public void DeleteCustomers()
{
    foreach(...SelectedCustomers)
    {
        customerService.DeleteCustomer(item);
    }
}

或者

public void DeleteCustomers()
{
  customerService.DeleteCustomers(SelectedCustomers);
 // The DataProvider is enumerating the list...
}

你认为什么更好?

4

5 回答 5

1

你已经自己回答了这个问题。在删除单个客户时,您调用:

customerService.DeleteCustomer(item);

这表明您正在将要删除的项目传递回服务(这实际上是对如何处理客户的特定方式的抽象)。 您清楚地表明该服务最了解如何执行此操作。

为此,删除多个客户应该像后一种选择:

customerService.DeleteCustomers(SelectedCustomers);

您在这里获得了一些好处:

  • 您再次承认该服务最了解如何执行此操作。也许服务(或任何它的抽象)可以以服务消费者不可用或立即显而易见的方式优化批处理操作。
  • 如果这是一个服务/WS/SOA 调用,那么最佳实践表明您应该更喜欢较少的“大块”调用而不是频繁的轻量调用。
于 2011-01-05T21:18:52.683 回答
0

DataProvider 有什么理由不应该枚举IEnumerable<T>?如果没有,只需使用第二种方式并让 DataProvider 处理它。

于 2011-01-05T21:16:28.593 回答
0

我会选择第二个,因为它清楚地揭示了你想要做什么。

于 2011-01-05T21:17:27.810 回答
0

我会同时使用这两种方法...如果您只需要在某个时候删除一个客户,则必须将单个实例包装在 IEnumerable 中,这很烦人

于 2011-01-05T21:19:08.093 回答
0

通常在客户端-服务器场景中,您希望尽量减少往返次数。

显然这意味着在枚举集合和单独删除和一次性删除集合之间,后者是更好的选择。

但是,作为替代方案,为了进一步减少通信,您可以将突变收集到集合中(添加、删除、替换等......),并且只有当用户按下“保存”时,才调用服务并发送过来一组变化。

于 2011-01-05T21:59:22.370 回答