1

これは質問の長いリストかもしれませんが、私に耐えてください。WPF、PRISM、CODE FIRST、およびSQL CEを使用してLOBアプリケーションの構築を開始しました。最初のアプリケーション(または試行)の後、多くの質問があります。まず、次のようにします。

  1. モデルまたはドメイン層のすぐ上のBLL層のどこに、ビジネスロジックを配置する必要がありますか?
  2. ビューモデルはリポジトリへの参照を受け取る必要がありますか、それともリポジトリはドメインモデルオブジェクトによってのみ使用される必要がありますか?
  3. 2番目の質問を別の言い方をすると、モデルを表示するにはどのようなオブジェクトを指定する必要がありますか?
  4. ディスプレイ(データグリッドなど)とフォームでの編集に同じビューモデルを使用していますが、多くの問題が発生します。コードを重複させずにこれを行うためのより良い方法はありますか?
  5. 私が直面した最大の問題は、階層内の子が親への参照を取得できないように、常にビューモデルを階層関係で編成し、ビューがそれらの子にバインドされ、オブジェクトの追加を引き起こすメソッドを呼び出したためです。リポジトリこれらのリポジトリへの変更を親に通知する方法が見つかりませんでした。バインドされたビューを更新できるので、イベントを使用してこれを解決する人がいますが、この解決策が気に入らないので、もっと良い方法があるかどうか知りたいですか?
  6. 少なくとも、VB .NETまたはWCF(ローカルデータベースが必要)を使用する例ではなく、上記のテクノロジを使用して実際のLOBアプリケーションを構築する例を誰かが指摘できますか。
4

1 に答える 1

1

現在、WPF、Entity Framework Code First、およびローカルデータベースを使用したSQLCE4.0を使用してLOBアプリを開発しています。私はPRISMを使用していませんが、独自の実装でIoCとしてMEFを使用しています。

  1. これまでのところ、コードファーストアプローチの利点を活用し、ドメインクラスにできるだけ多くのビジネスロジックを実装することをお勧めします。また、それらにINPCを実装します。そうしないと、ViewModelsですべてのプロパティが複製されることになりますが、これは意味がありません。モデルをダムにする必要があるという規則はありませんが(一部の人々はそう考える傾向がありますが)、ダムモデルはViewModelの操作をより面倒にします。
  2. プロジェクトについて詳しく知ることなく、ここで明確な推奨事項はありませんが、常識です。ベストプラクティスが邪魔になり始めない限り、ベストプラクティスに固執するようにしてください。「パーフェクト」はしばしば「グッド」の敵です。
  3. ViewModelに、ビューを提供するために必要なもの(単一のモデルオブジェクト、コレクションなど)を取得させます。多くの場合、より単純なソリューションの方が長期的に維持するのが簡単です。
  4. これが何を意味するのかよくわかりません...可能であればViewModelを数回使用しますが、1つのVMを複数のビューで機能させるのに問題がある場合は、ViewModelの機能はビューを提供することだと思います、2つの異なるVMに分割する必要がある可能性があります。基本クラスにすべての共通のプロパティとメソッドを収集し、必要に応じてそこから継承するだけです。
  5. VMが相互に通信するためのいくつかの緩い結合方法があります。私はそのようなことのためにMVVMLightMessengerクラスを使用していますが、PRISMが同様の機能を提供することを理解しています。あなたがそれを乱用しなければ、子供から親を参照することは罪ではありません。私はViewModelBase<T>を持っており、子には、基本クラスを指し、Tタイプを指定する親の参照があります。これは、これまでのハード参照とルーズ参照のバランスが取れています。
  6. 誰かがあなたにそのような例を指摘したら、私に知らせてください!実際には、ローカルデータベースでの作業はもっと簡単なはずです。私の場合、シングルトンコンテキスト(多くの人が嫌うようです)を使用していますが、これはローカルアプリであるため、シングルユーザーであり、スレッドの複雑さはありません。シングルトンコンテキストは私の生活をはるかに楽にします。私はまだこの条件でそうしない本当の正当な理由を見つけるのを待っています。

PS:おそらく、あなたの質問に反対する人もいるでしょう。なぜなら...それは1つの質問ではなく、多くの議論の余地があるからです。閉鎖された場合は、チャットをお試しください。

よろしくお願いします。

于 2013-01-27T02:28:33.840 に答える