質問
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モデルの一部のオブジェクトが欠落しており、一部が本来の場所にない、急ぎのリリースでした。)
最終的に、すべてはあなた、あなたのプログラミングスタイル、あなたのアーキテクチャ上の決定、そしてあなたのテクノロジーの知識に依存します。
本よりもある方法でそれを行う方が自然であると思われる場合は、決定を下す前に、
なぜすべきか
としてはいけない
を考えてください!