私は.NET 3.5でLINQ-To-SQLを使用しています。基盤となるデータベースに基づいていくつかのクラスを構築しました。私は今決定に直面します:私はクラスコードまたはデータベースのデータを検証するのですか?検証:クラスまたはデータベースで行いますか?
私は賛否両論を見ることができます。データベースで検証を行うと、どのアプリケーションがデータベースを使用しているかに関係なく、検証が行われます。 (私は現在、他のアプリがこのデータベースにアクセスするとは思っていませんが、誰が知っていますか?)
OTOHは、私の検証を行うためにはるかに堅牢なプログラミング環境を提供します。確かに、UIがアイテムをデータベースに送信されるまで待つのではなく、問題を修正できる状態になっている間に、問題を把握することができます。 Linq-to-SQLは列のデータ型を取得できますが、AFAIKでは、基礎となるデータベースのCHECKまたはDEFAULT制約のプログラムによる強制は提供されません。
エンティティの「Last Modified」プロパティ:データベースのON INSERTトリガを使用して更新できます。または、クラス自体のPropertyChangedイベントに応答することもできます。クラス自体のイベントを購読するのは奇妙ですが、クラスが部分クラスとして定義された2つのファイルにあり、これらのファイルの1つがIDEによって自動生成されるため、この方法では自動生成されたファイルを改ざんする必要はなく、ので、私は.dbmlを再生成する必要があります)、または私は、エンティティがデータベースに提出されたときにアプリでそれを行うことができます壊れません。
私はデータベースとクラスで検証を複製したくありません。私は、クラスコードで妥当性を確認する堅牢な環境が好きです。しかし、私の純粋主義者は、別のアプリ(これまでにないと思う)がデータベースを使用しても、データベースの検証が一貫性を保証すると考えています。
このトピックについて他のユーザーはどう思いますか?
データベース内の制約を定義することで、アプリケーション内のバグから保護し、後で新しい機能がアプリケーションに追加されたときに不変条件/アサーションを保持することもできます。 – ChrisW