2012-02-09 13 views
2

WPF GUIを使用して新しい.NetソフトウェアにMVVMパターンを使用しています。 IDataErrorInfoを使用すると、すべてのフィールドが点灯するプロパティの検証がうまくいきます。しかし、私はビジネスロジックのいくつかの並べ替えを実装するための良い方法を探しています。MVVMで論理検証を実装する良い方法は何ですか?

単純な例;列を含むテーブルがある場合、IDataErrorInfoインターフェイスを使用して、名前がnull/validでないかどうかを確認しています。しかし、私はまた、列名が一意であることを確認したい。列が他の場所で使用されているため、削除できない可能性もあります。

MVVMを使用してビジネスロジックを実装する方法に関する提案はありますか?周りを見回している、 'the'解決策を見つけるように見えることはできません。

+1

インターネットを検索した後、私はこのウェブサイトを見つけました:http://rachel53461.wordpress.com/2012/01/22/validating-business-rules-in-mvvm/; IDataErrorInfoインターフェイスを使用してビジネスロジックの検証を組み合わせるという面白いアプローチを採用しています。誰でもこのアプローチの経験がありますか? – ferdyh

答えて

1

私はこの本(Amazon.comへのリンク)をお勧めしたいと思います: Building Enterprise Applications with Windows Presentation Foundation and the Model View ViewModel Pattern

それはちょうどそのタイトルにMVVMを持っていますが、それが話題と整理することも可能な方法及び構造の広い範囲を提供しますアプリケーション。

私はそれに多くの有益なアイデアや提案を見つけました。

私が見ている唯一の欠点は、それが単一のトピックにあまりにも深く進んでいないということです。一方、あなたはそれを素早く読むことができ、順番に各章を読む必要はなく、あなたが探しているものに集中することができます。

本書は、あなたが知りたいと思っていることや、後で詳しく説明します。

+0

現在、MVVMの書籍はhttp://www.amazon.com/Developers-Guide-Microsoft-Prism-Applications/dp/073565610X/です。それが書籍の大きな違いであるかどうかは分かりません。私が持っている本、私は良い解決策を見つけることができないようです。 – ferdyh

+0

@Ferdy:Amazonのリンクは「内部を見て」提供しています。目次を見て、すでに持っている本と比較したいかもしれません。私は特に、第5章「ビジネス層」を考えています。第5章では、それを構築するためのいくつかの考慮事項を示しています。 –

2

MVVMパターンを使用する場合、ビジネスロジックの場所は常に困難です。質問は常にモデルまたはモデルの表示ですか?

私はそれが重複をチェックしているかどうかによって決まると思います。

ユーザーがビューに表示されているデータを複製しないようにしようとしている場合は、関連付けられたビューモデルでチェックを行います。

モデル内または関連するデータレイヤー(読み取りDB)内に存在するデータをユーザーが複製しないようにしようとする場合は、Modelドメイン内で実行する必要があります。

覚えておく必要があるのは、コードが重複に関するビューにデータを表示するだけですが、表示するかどうかはビューに依存します。

多くの場合、大量のビジネスロジックと「ヘルパー」機能を別々のクラスライブラリプロジェクトに置き、気分が良いところから機能を呼び出します。これにより、ビューモデルからモデルへの機能の切り替えが容易になります。

msdn MVVMパターンページは見たことがありますか?見てくださいhere

すべてのことのように、実用的なアプローチをとる必要があることに注意してください。 apparantビジネスロジックがViewコードの背後に配置されることがありますが、常に最小限に抑える必要があります。

+0

+1は、別のlibにコードを置くことを言及しています。すべてがあまりにも頻繁に私は人々が盲目的にMVVMを遵守しているのを見たことがあります。*すべて*が3つのクラス(V VMまたはM)の1つでなければならないと思うので、VMおよび/またはMは厄介な神オブジェクトに成長します。 – stijn

0

WPFとSilverlight内でMVVMを使用すると、ビジネスロジックは、通常、さまざまなコンシューマのサービスを介してアクセス可能なドメイン層でより深く実装されます。より抽象的な方法でドメインロジックを実装する限り、アプリケーションの複雑さとビジネスルールの動的性に応じて無限のオプションがあります。

ドメインオブジェクトの検証は、ドメインオブジェクト自体に焼き付けるのではなく、IOCの注射可能な検証サービスで行われるべきではないでしょうか。

私は一般的にそのアプローチが少し過剰であることがわかります。あなたのドメインオブジェクトは、ある種のバリデーションインタフェースを実装することができます。ドメインオブジェクトは、焼き込みまたは動的な方法で共有可能なビジネスルールに参加することができます。ドメインオブジェクトとその関連オブジェクトの状態をチェックし、破損したビジネスルールのコレクションにエントリを追加するルール。

+0

より深いことは、私が一般的に既存の機能を使用することです。たとえば、WPFではIDataErrorInfoインターフェイスを使用して、エラーのフィールドにマークを付けます。どういうわけか、私はビジネスロジックのバリデーションのためにそれに取り掛かりたいと思います。 – ferdyh

関連する問題