最近、MVVM パターンの使用を開始しました。ビューモデルがすぐに非常に大きくなり、管理できなくなる可能性があることに気付き始めています。これに対抗する方法はありますか?
2 に答える
これにはいくつかのアプローチがあります。私はまだ単一の普遍的な「修正」を見つけていませんが、途中で拾ったいくつかのことを共有します. これをc#とタグ付けしましたが、使用しているプラットフォームを指定していません (これはデスクトップ アプリですか、ASP.NET Web サイトですか?)。ただし、MVVM の私の経験のほとんどは Web 開発にあるため、その一部が忍び寄る可能性があります。
まず、大規模なビューモデルは、再考が必要な設計の兆候である可能性があることを認識してください。1 つのページがやりすぎている可能性があります。このページをいくつかのページに分割すると、ビューモデルのサイズが小さくなるだけでなく、ロジックを他のメソッドに移動して、バックエンドまたはサーバー側のコードをナビゲートしやすくなり、ページがすっきりして簡単になります。エンドユーザーが実際に使用するために。
次に、ビューモデルが境界を少し超えていないかよく見てください。他の場所で処理する必要があるロジックを実行している可能性があります。たとえば、リポジトリ (またはそれに類するもの) を使用してデータ ソースにアクセスしている場合、クエリの作成や保存用のデータの準備に関連するロジックは、viewmodel に処理させるのではなく、これらのクラスに処理させます。リポジトリを使用しない場合は、いくつかを追加して、データソース アクセス コードをそれらに移すことを検討してください。
同様に、ビューモデルがロジックを共有しているかどうかを確認してください。その場合は、基本クラスにシフトし、その共有ロジックが必要なときはいつでもそのクラスから継承します。複数の基本ビューモデルから継承して、機能を結合し、コードの繰り返しを減らすことができます。
この最後のポイントは、もう少し Web 固有ですが、部分ビューを使用してください。ページに多くのものが含まれているためにページのビューモデルが大きくなっている場合は、ページを領域またはペインに分割し (少なくとも概念的には、視覚的でなくても)、各領域を部分ビューにすることを検討してください。これは、ビュー コードが読みやすくなることを意味します。なぜなら、膨大なページだったものが、多かれ少なかれ、部分的なビュー呼び出しを含む単なるテンプレートになっているからです。この巨大なページを構築してデータを入力するための 1 つの大きな方法が、いくつかの小さな方法になったため、サーバー側のコードが読みやすくなります。何よりも、ページ全体をリロードすることなく、AJAX を使用して (定期的に、またはインタラクションやイベントに基づいて) それらをリロードするなど、これらのペインで巧妙なことを実行できる可能性さえあります。