1

私は Windows Forms Databinding を使用して、 のようなインターフェイスを実装していますIDataErrorInfo。これが機能するためには、ドメイン (またはビジネス) オブジェクトを無効な状態にすることが許可されています。実際、ドメイン オブジェクトは、IDataErrorInfo正しく機能するために、ユーザーが入力した無効な値を保持する必要があります。オブジェクトが無効な状態で保持されない限り、問題ありません。

ただし、件名が示唆するように、制約と検証に違いがあるかどうか疑問に思っていました。前者は、ユーザーがまったく変更を加えることを防ぎます。後者は、上で説明したタイプの検証です。

説明させてください-コレクションがPersonありPersonSSNプロパティがある場合。はPersonCollectionにキー設定されてSSNいます。つまり、コレクション内にPersons同じが 2 つ存在することはありませんSSN。で一時的な無効状態を許可すると、一時的ではありますが、コレクション内に2 つの重複Personがある状況が発生します。これにより、別のオブジェクトが で動作し、複製された でオブジェクトを探し、2 つのオブジェクトを取得するという問題が発生する可能性があります。PersonsSSNPersonCollectionPersonSSN

したがって、特定のタイプの検証は、(変更後の) 検証ではなく、制約である必要があるようです。

考え?

4

1 に答える 1

1

あなたの例を挙げると、 の検証の一部は、重複していないPersonことを確認するルールにする必要がありますSSN(ちなみに、重複の場合、どれが正しいかをどのように知ることができますか?)。

問題が発生した場合PersonCollectionは、実際にはsIDictionaryによってキーが設定されているため、コレクションに追加する前にSSNa が検証されるまで待ってください。Personオブジェクトは、それができるように一時的に無効にする必要があります。

検証の詳細については、Business Objects, Validation And Exceptionsに対する私の回答を確認してください。

于 2009-09-07T14:26:30.393 に答える