2011-01-05 7 views
0

私のユーザーは、DataGrid内の複数のエンティティを削除できます。 私は私たCustomerServiceクラスになりましたDeleteCustomerメソッドを作成する必要がありますサービスレイヤのエンティティを削除する:削除(Tアイテム)をforeachするか、削除(List <T>リスト)を呼び出す必要がありますか?

プレゼンター/ ViewModelにのように:

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

OR

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

あなたはどう思いますか?

+0

@casperOne haha​​あなたは早かった; P – msfanboy

+0

時々、それは呪いだ。 = P – casperOne

答えて

1

あなたはすでに質問に自分自身で答えています。特異な顧客を削除するには、お電話:

customerService.DeleteCustomer(item); 

をこれは、あなたが(ここでは、実際に顧客を処理する方法の具体的な方法以上の抽象化である)サービスに戻って、削除するアイテムを渡していることを示しています。 この操作の実行方法について、サービスが最善の知識を持っていることを明確に示しています。そのために

、複数の顧客を削除すると、後者のオプションのようにする必要があります:

customerService.DeleteCustomers(SelectedCustomers); 

あなたがここにいくつかの利点を得る:

  • あなたは再びサービスがどのように最高の知っていることをacknolwedgingされていますこの操作を実行します。おそらく、サービス(または抽象化しているもの)は、利用できない、またはサービスのコンシューマーにすぐに明らかな方法でバッチ操作を最適化できます。
  • これはサービス/ WS/SOAコールの場合、ベストプラクティスによれば、頻繁なライトコールよりも「チャンク」なコールを少なくする必要があります。
+0

私はこれを多分文法を意味すると思いますか? "おそらくDATAPROVIDERはバッチ処理を最適化することができます..." – msfanboy

+0

@msfanboy:いいえ、 'customerService'は最高の抽象化であり、永続性メカニズムが何であるか(このレベルであるべきか)は明確に定義されていません。マネージャーがバルク操作を実行する方法を知っている場合、それを行うための方法が公開されている必要があります。そのためには、ドメイン固有の知識が必要です。 – casperOne

0

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

0

私は、あなたがしたいことをはっきりと示すように、2番目のものと一緒に行きます。

0

私は両方の方法を持っているでしょう...あなただけの迷惑はクライアントサーバーシナリオで一般的にIEnumerableを

+0

もしユーザーがDataGridにMultiSelectionを持っていたら、Selectionの数が1より大きいかどうかチェックしてからDeleteCustomerを呼び出すか、DeleteCustomerを呼び出す必要がありますか?それほどうまくないです... – msfanboy

+0

あなたのcustomerServiceクラスが気にならないことはありません...ある時点でどんなクライアントコードがそれを呼び出すのか分かりません。 –

0

に単一のインスタンスをラップする必要がある時点で単一の顧客を削除する必要がある場合は、あなたを往復の量を最小限に抑えたい。

明らかに、これは、コレクションを個別に列挙してから削除するまでの間に、コレクションを一度に削除することを意味します。

しかし、コミュニケーションをさらに減らすために、コレクションに(Add、Delete、Replaceなど...)コレクションを変更することができます。ユーザーが「Save」を押した場合のみ、一連の変更を送信します。

関連する問題