2011-06-20 19 views
0

Silverlight LOBアプリケーションでは、ItemsControlにRIAサービス(EF)リクエストの結果を入力しています。アイテムコントロール内にはカスタムコントロールがいくつかあります。そのうちの1つに、エンティティを削除するためのボタンがあります。これは悪い習慣です(これは間違っていますか)。

これを削除するには、コントロールのドメインコンテキストに添付して削除します。それを添付できるように、私はデータを受け取ったときに私のビューモデルでこれをやっています:

 foreach(var app in Apps.ToList()) 
     { 
      _context.Apps.Detach(app); 
     } 

これはハックですか?それは確かに1のように感じるので。

答えて

1

パターンは、他の方法で現像剤を提供するために存在する。あなたは匂いのあるコードを特定しました。あなたを悩ませるもの。今は2つの選択肢があります。臭いが除去するのに十分なほど攻撃的ですか?それを取り除くにはどうすればいいですか?

提案が1つあります。 RIAサービスで標準のCRUDを使用する必要はありません。アプリケーションのIDを取得し、データベースで削除を実行するService Operation DeleteAppを作成することができます。これにより、クライアント側でデタッチ等を行う必要がなくなる。これは、Transaction Scriptパターンの例です。非常に初歩的な例ですが、described in my articleです。これを行った後にクライアントリストをリロードして、古いデータがないようにすることを忘れないでください。

非常に極端な場合、コマンドクエリの分離を調べることができます。この場合、2つの個別のDomainServicesがあり、一方は読み取り専用で、もう一方は書き込みのみです。これにより、あなたの行動をより明示的に表現し、WHATの代わりに、HOWの代わりにやりたいことを考えるようになります。

関連する問題