WPFでUIからビジネスオブジェクトを分離する必要がありますか?

StackOverflow https://stackoverflow.com/questions/259293

  •  06-07-2019
  •  | 
  •  

質問

WPFのビューモデル指向の方法により、UIでビジネスオブジェクトを使用したいだけです。これに関する問題を見ましたか?なぜまたはなぜそうしないのですか?

役に立ちましたか?

解決

Microsoftの製品チームからのガイダンス(たとえば、Blendチームが使用しているもの)は、人気のあるMVCパターンのバリアントであるModel-View-ViewModelアーキテクチャです。適切な出発点は、 http://blogs.msdn.comです。 /johngossman/archive/2005/10/08/478683.aspx 。このトピックに関するWPF博士の優れた記事もあります。

本質的に、ObservableCollectionなどのバインディングに優しいビジネスオブジェクトを使用するViewModelレイヤーを作成することを提唱します。

また、Silverlight 2に最終的に移行する可能性がある場合、UIテクノロジーを交換できるように(WPFとSilverlightがソースコード互換になるまで)ビジネスオブジェクトをUIレイヤーに入れないようにすることもできます。

他のヒント

私はそれを別の観点から見ていると思います。必要なUIプレゼンテーション(つまり、web、WPF、WinForms)を使用できるように、UIをできるだけ排除するようにします。プレゼンテーションレイヤーのビジネスロジックが多いほど、別のUIに移行する場合は後から書き直す必要があります。

UIにビジネスオブジェクトが存在することは、あなたがしているのが表示である限り、問題ではありません。つまり、プロパティを変更したり、プロパティを削除したり、新しいプロパティを作成したりする場合は、コントローラー、プレゼンター、またはそれを行うものにメッセージを送信する必要があります。ビューで結果を更新する必要があります。

すべきではないは、オブジェクトの ToString メソッド(またはオブジェクトの他のメソッドやプロパティ)を使用して、オブジェクトの表示方法に影響を与えることです。景色。オブジェクトのビューを表すには、 DataTemplate を使用する必要があります。より複雑な表現が必要な場合は、 IValueConverter を使用してオブジェクトを視覚表現に変更できます。

WPFの第一人者ではないので、確信はありませんが、M、V、Cを分離する通常の理由は、ビューとは無関係にコントローラーをテストできるようにするためです。

もちろん、あなたを止めるものはありませんが、それが分離されている場合は、はるかにテストしやすい(つまり、単体テスト)である必要があります。通常MSが促進するMVPパターンは、プレゼンター(つまり、WPFフォーム)を中心に調整されており、より制御されています。...

アプリケーションアーキテクチャまたはコンポーネントとオブジェクトの再利用を計画している方法に応じて、ユーザーインターフェイス(この場合はWPF)からある程度の独立性を選択できます。

これは私の経験のサンプルです:

  

WPFを少しだけ使って、   比較的小さなプロジェクトで、   ビジネス層はすでに定義されています   ユーザーを作成する必要がありました   インタフェース。もちろん、インターフェース   独自のルールとオブジェクトを定義していた   それが働いていたこと、そして   アプリケーションは   独自の作成を選択したUX   主に拡張することによる特定のオブジェクト    DependencyObject (主に Data   バインド目的)。

     

一部の人々は、それは大丈夫ではないと主張するかもしれません   依存関係オブジェクトを使用するには   直列化可能ではありません(実際には   は-XAMLに)、彼らがもたらす   WPFへの依存(    System.Windows 名前空間)、およびいくつか   他の引数。また、    DependencyObjects はその他をサポートします   添付プロパティなどのオプション   および依存関係プロパティ。その他   例えば使用したいかもしれません    INotifyPropertyChanged   理にかなっており、他の人が言うかもしれない   これらのパターンはすべてに属していません   UI以外のレイヤー。   (詳細を知りたい場合は、   優れたWPF データバインディング   MSDNライブラリの記事、   のベストプラクティスを含む   パフォーマンスとユーザーインターフェイス用)

たとえば、 System.ComponentModel の代わりに、 System.Windows 名前空間にいくつかの便利な機能を追加することをMicrosoftが選択したのは、ちょっと悪いことです。私の意見では、それらはより有用だったかもしれません(これらの重要なパターンのすべてをWPFだけでなく.NET Frameworkに提供することによって)。

もちろんこれはほんの始まりであり、私たちの多くは、物事が最終的に正しい方向に進化することを知っています。 (トピック外になるリスクがある:たとえば、silverlight 2.0フレームワークを使用します。WPFモデルの一部のオブジェクトが欠落しており、一部が本来の場所にない、急ぎのリリースでした。)

  

最終的に、すべてはあなた、あなたのプログラミングスタイル、あなたのアーキテクチャ上の決定、そしてあなたのテクノロジーの知識に依存します。

     

本よりもある方法でそれを行う方が自然であると思われる場合は、決定を下す前に、なぜすべきかしてはいけないを考えてください!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top