3

私は現在、MVVMデザインパターンを使用してエンタープライズWPFLOBデスクトップアプリケーションに取り組んでいます。開発マシンの現在のソリューション構造は次のとおりです。

  • メインプロジェクト-すべてのビューを含むWPFアプリケーション(XAML)
  • ビューモデル-メインプロジェクトのビューをバックアップするすべてのビューモデルが含まれます
  • BLL-ビジネスロジックレイヤー
  • DAL-データアクセス層-MS-SQLサーバーに接続し、ストアドプロシージャを呼び出します
  • モデル-すべての事業体が含まれます

独自のサーバーにあるデータベースを除いて、現時点ではすべてが同じマシンにあるため、現在WCFを使用していません。ただし、将来的には、コードベースを3層に分割することを計画しています。

私が抱えている問題は、ある同僚が、アプリケーションを次のように3つの別々のサーバー/マシンに分割する必要があると主張していることです。

  1. プレゼンテーション層-ユーザーのマシンのクライアントWPFアプリケーション(表示)。これは、Webクライアントアプリケーションである可能性もあります
  2. ロジック層サーバー-ビューモデル+モデル+ビジネスロジックレイヤー+データアクセスレイヤー
  3. データ層サーバー-データベースサーバー

私はビューモデルがビューから離れて(別のサーバーで)生きているとは想像できません。彼はそれが可能であると主張しています。

編集:私の同僚は、サーバー側にビューモデルがあると、将来の展開が容易になり、変更はサーバー側でのみ行われるため、保守が容易になると主張しています。ただし、ClickOnceを使用して.NETアプリケーションを展開したので、それほど大したことではありません。

私が読んだことから、ViewとViewModelを含むユーザーのコンピューターにWPFクライアントアプリケーションをインストールし、WCFなどの通信レイヤーを介して下位レイヤーでサービスを公開することができます。

別の投稿でのこの回答は、次のように述べています。「MVVMでは、UIレイヤーは2つのレイヤーに分かれています。アプリケーションロジックを担当するViewModelと、プレゼンテーションのみを担当するViewです。」これに基づいて、私の基本的な質問は、ViewレイヤーとViewModel UIレイヤーを別々の層(サーバー)に配置できるかどうかです。もしそうなら、それはお勧めですか?そしてそれはどのように達成できるでしょうか?

ありがとう!

4

2 に答える 2

7

View Model、好きなように呼んでObjectください。最後に、コンピュータのメモリに保持されているインスタンスです。他のインスタンス化されたクラスと同じように。その目的は、ビューとモデルを接続したり、さまざまなBLメソッドにアクセスしたりすることです。

ビューモデルのインスタンスをあるサーバーからクライアントに渡すことが可能である場合でも(サーバーでバイナリシリアル化し、もう一方の端で逆シリアル化するとします)-それ以外の場合は、大きなオーバーヘッドが発生します(ネットワークとCPU上で)、それがどのように物事を容易にするかはわかりませんが、逆に、これがどのように物事をより保守しやすくするのかを理解したいと思います。

ビューとビューモデルの両方がクライアント側にある必要があります。例えば

Presentation Tier - The client WPF application (View + View Models)
Logic Tier server - Model + Business Logic Layer + Data Access Layer
Data Tier server - The database server

この分離を考えると、BLまたはDALで行われた変更は、クライアントの新しいバージョンを作成する必要がないということは正しいです(インターフェイスを壊さない、モデルを変更しないなど)。

于 2012-12-12T15:05:23.557 に答える
1

明白なことから始めましょう:

  1. ViewModelsはサーバー上に存在しません。それらの役割は、複数のサービス/モデルからのデータをビューで利用できるようにし、ビューとデータ間のリンクを提供することです。誰もこれをしませんし、これが良い考えだと誰も思わないでしょう。これまで。
  2. データ層は、最小限の介入で、必要な場所に配置できます。

議論されるのは、ビジネスロジック層のどれだけ/少しが上に移動してWCFレイヤーになるか、そしてどれだけがクライアントマシンに残るかです。これが議論の対象です。

同僚がビューモデルをサーバー上に配置する必要があると主張し続ける場合は、プロトタイプを作成するように同僚に依頼してください。それは非常に面白いはずです。

于 2012-12-12T15:04:44.490 に答える