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

あなたがやりたいことをはっきりと明らかにするので、私は2番目のものを選びます。

于 2011-01-05T21:17:27.810 に答える
0

私には両方の方法があります...ある時点で単一の顧客を削除するだけでよい場合は、単一のインスタンスをIEnumerableでラップする必要があります。

于 2011-01-05T21:19:08.093 に答える
0

DataProvider が を列挙してはならない理由はありますIEnumerable<T>か? そうでない場合は、2 番目の方法を使用して、DataProvider に任せてください。

于 2011-01-05T21:16:28.593 に答える
0

通常、クライアント/サーバーのシナリオでは、ラウンドトリップの量を最小限に抑える必要があります。

明らかにこれは、コレクションを列挙して個別に削除するか、コレクションを一度に削除するかのどちらかを選択する方がよいことを意味します。

ただし、別の方法として、通信をさらに減らすために、ミューテーションをコレクション (追加、削除、置換など...) に収集し、たとえばユーザーが「保存」を押したときにのみ、サービスを呼び出して送信することができます。一連の変更。

于 2011-01-05T21:59:22.370 に答える