私は Windows Forms Databinding を使用して、 のようなインターフェイスを実装していますIDataErrorInfo
。これが機能するためには、ドメイン (またはビジネス) オブジェクトを無効な状態にすることが許可されています。実際、ドメイン オブジェクトは、IDataErrorInfo
正しく機能するために、ユーザーが入力した無効な値を保持する必要があります。オブジェクトが無効な状態で保持されない限り、問題ありません。
ただし、件名が示唆するように、制約と検証に違いがあるかどうか疑問に思っていました。前者は、ユーザーがまったく変更を加えることを防ぎます。後者は、上で説明したタイプの検証です。
説明させてください-コレクションがPerson
ありPerson
、SSN
プロパティがある場合。はPersonCollection
にキー設定されてSSN
います。つまり、コレクション内にPersons
同じが 2 つ存在することはありませんSSN
。で一時的な無効状態を許可すると、一時的ではありますが、コレクション内に2 つの重複Person
がある状況が発生します。これにより、別のオブジェクトが で動作し、複製された でオブジェクトを探し、2 つのオブジェクトを取得するという問題が発生する可能性があります。Persons
SSN
PersonCollection
Person
SSN
したがって、特定のタイプの検証は、(変更後の) 検証ではなく、制約である必要があるようです。
考え?