2

コレクションとDataGridViewの間に双方向データバインディングを提供するために、UIにBindingListが必要です。ただし、ビジネスレイヤ(またはドメインレイヤ、サービスレイヤ、データレイヤなど)からBindingListを返すのは正しいとは限りません。つまり、UI要件のためにBindingListのみを使用していましたが、このUIの必要性は私のドメイン層と結びつくでしょう。ビジネスレイヤ(またはサービスレイヤ、ドメインモデルなど)からBindingListを返す必要がありますか?

これを行うための「適切な」デカップリングされた方法は何ですか?私はIListを返して、プレゼンテーションの目的でBindingListにコピーする必要がありますか?実世界の視点から見ると、このオーバーヘッドは価値がありますか?

+0

この質問は、実際には、WPFでMVVMを使用する方法の検討につながっています。私はちょうどそれに入っているが、私はそれが好きです。 – User

答えて

0

ドメイン層がより一般的なタイプを返し、通知するかどうかは(ObservableCollection<>)か(IEnumerable<>またはIList<>)かどうかは、要件に従います。

UIレイヤーは、その機能が必要な場合は、IBindingListに欲しい(そうでない)ようにトランスフォームすることができます。

私たちはBindableLinqを使用して、UIレイヤーで通知/同期バインディングリスト(フィルタ付きでも可)の目標を達成しました。

1

「正しい」方法はわかりませんが、私は過去にCSLAのようなフレームワークを使用していましたが、BindingListとObservableCollectionをビジネスリストに使用していました。これは、項目がリストに追加または削除されたときにUIが更新されるので、UIのビジネスオブジェクトを非常に簡単に使用して作成されました。 IListを返してからBindingListにコピーする場合は、IListの変更を手動で監視して処理し、それらをBindingListに変換する必要があります。私の個人的な好みは、BindingListまたはObservableCollectionを使用してビジネスレイヤーをUIに提示する、可能な限り豊富な機能のビジネスレイヤーを持つことです。

+0

私はこの問題は、Webサイト経由で同じデータを公開すると、バインディングリストにWebコンテキストでの使用が制限されている(または制限されている)ことを意味します。 – User

2

IListのコピーはありません(少なくともコピー/クローンを作成しないことを望みます)。通常は、同じIListオブジェクトで別の参照を作成するだけです。 IListオブジェクトを返すことは何も悪いことではありません。

Listオブジェクトを作成し、UIの中にあるbindingListからREFERを呼び出します。

私は、UI(コンソール、Web、Win、サービス)で前者を使用する場合があるので、IList(List、HashTable aso)オブジェクトをBindingListよりも返すほうがよいと思います。例えば。 bindingListを使用しても、Webアプリケーションの利点はありません。

+0

WinformsのDataGridViewでIListを使用すると、IListの変更がUIに反映されることをどのように示唆していますか? – User

+0

私はあなたが私のポストを誤解したと思う - あなたはUIレイヤーでBindingListを使う必要があります。しかし、ドメイン層ではIListや他の何かを提案します。この点を明確にするために:D –

+1

ああ、私は参照してください。 "コピーしない"についてのコメントでは、IListからUIレイヤーにBindingListを作成することを前提としています(例:var x = new BindingList (myIList))。これは効果的にリストをコピーしていませんか? Microsoftのドキュメントによると、この操作の時間はO(n)ではないと言われています。O(1) – User

0

独自のイベントハンドラを実装せずにUI要素でビジネスモデルを編集する場合は、ビジネスモデルにBindingListが必要です。

いつでもnew BindingList<MyWidget>(list)のようなことをすると、バインディングをルートリストから切り離すことになります。アイテムが編集されると、すべて正常に機能しますが、追加や削除は元のリストに反映されません。

最近、BindingListの変更を反映するようにモデルを更新したBindingList ListChangedイベントをタップして、このような実装を試みましたが、モデルがコントローラによって変更された場合、UIのBindingListは更新されませんでした。

リストに項目を追加または削除するたびにイベントを発生させる特別なアクセサを作成することができますが、これはBindingListホイールのオーバーヘッドを増やすだけです。

関連する問題