サーバー側にステートレス サービスと貧血ドメイン オブジェクトがあります。サーバーとクライアント間のモデルは POCO DTO です。クライアントは MVVM になる必要があります。モデルは、20 の異なるクラスの約 100 のインスタンスのグラフである可能性があります。クライアント エディターには、モデル/ビューモデルにライブ接続されたさまざまなタブ ページが含まれています。
私の問題は、サーバーのラウンドトリップ後に変更を適切に伝達する方法です。ViewModel から DTO に変更を反映するのは非常に簡単です。古い DTO を破棄して新しいものに置き換えることはできますが、リスト/DataTemplates の再描画が大量に発生します。
サーバー側の変更を収集し、クライアント側に送信できました。ただし、変更されたフィールドの名前は、ViewModel 固有ではなく、ドメイン/DTO 固有のものになります。そして、マッピングは私には自明ではないようです。ラウンドトリップ後に必須の方法で行う必要がある場合、ビューモデルの SOC/モジュール性が損なわれます。
オートマッパーやエミットマッパーなど、ある種のマッピングルールエンジンについて考えています。しかし、それは非常に単純なユースケースを解決します. アイテムをリストまたは削除に追加することをマップ/伝播/変換する方法がわかりません。値を既存のインスタンスにマージできるように、コレクション内のインスタンスを識別する方法。同様に、検証/エラー情報を伝達する必要があります。
たぶん、DTO に INotifyPropertyChanged を実装し、サーバー側のイベントを再生しようとする必要がありますか? そしてViewModelをそれにバインドしますか?バインディングは、コレクションのマージに関する問題を適切に解決しますか? そのために PRISM の EventAgregator は役に立ちますか? イベントの記録再生コンポーネントはありますか?
サーバー側のロジックを備えたアーキテクチャのためのより良いクライアント側のパターンはありますか?