0

私は少しアーキテクチャ上の問題を抱えていることに気付きました.カスタムJSONプロトコルでWebサービスを使用するDALを使用して、特にデータ入力と永続性を含む小規模なプロジェクトに取り組んでいます。これまでのところ、とても良いです。比較的単純な問題で、いくつかのクイック&ダーティDataTable+DataGridコードをまとめて、それで完了します.

ただし、これは学習プロジェクトであり、Caliburn.Micro フレームワークを使用して、ややクリーンな設計、特に WPF GUI を使用した MVVM を行う方法を見つけようとしています。サーバー部分は修正済みですが、DALを含めてクライアント部分全体を行っています。

DG+DT コンボを使用すると、DG で一連の編集を行うのは非常に簡単です。ユーザーがコミットするときはRows、プロパティを確認し、RowState必要に応じて DAL メソッドの作成/更新/削除を実行するだけです。DataTableただし、MVVM のデータバインディングにあまり適していないように見えます。関連する ViewModels は、使用されている UI コントロールの種類を気にする必要はありません... 永続化が Web サービスを介して行われることを考えると、変更のバッチコミットを要求することは合理的と思われます十分ですが。

だから私は私のデザインオプションが何であるかを考えています。

私が理解しているように、DAL はモデル レイヤー オブジェクトを処理する必要があり (このプロジェクトに DTO を導入する必要はないと思います)、これらはエディターの ViewModel にデータバインドされる前に ViewModel にラップされます。

これまでに思いついた最良のアイデアは、エディター ViewModel を起動するときに編集対象のコレクションのクローンを作成し、コミット時にコピーに対してデータバインドされたコレクションをチェックすることです。新しい/変更された/削除されたオブジェクトを検出させてください。

IsModifiedとプロパティを保持するというアイデアも試しましたIsNewlyCreated(それらは ViewModel に含まれると思いますか?) - 削除されたアイテムの追跡は、編集可能なアイテムを に保持し、イベントをObservableCollection処理し、削除されたアイテムを に追加することで処理できる可能性があります。CollectionChanged別のリスト?

ご覧のとおり、これを処理する方法がよくわかりません。提案があれば大歓迎です:)

4

1 に答える 1

1

初めに

1-コードを変更しないと生きていけなくなるまで、変更を加えないでください。

2-すでに述べたように、あなたは学習プロジェクトを作成していて、よりモジュール化されたアプリケーションが必要なので、実装の詳細に入る前に、まずアプリケーションをよりモジュール化する方法を中心に考えます。

3- Prism + MVVMフレームワークの使用を検討しましたか?

4- ViewModelでも、DataTableを使用してデータをグリッドにバインドし、DataTable.GetChanges()メソッドを使用するとテーブル内のすべての変更が提供されるため、ブール値を維持する必要がないことをお勧めします。 IsNewやIsModifiedなどの変数。

5-まだDataTableを使用することに確信が持てない場合は、ObservrableCollectionを使用してデータをグリッドにバインドします。ObservrableCollectionは、個々のアイテムが変更されたことを通知しません。アイテムが追加または削除されたときにのみ通知します。

于 2010-11-15T01:36:03.413 に答える