1

新しいオブジェクトをインスタンス化するとき、検証に関して渡されるパラメーターをどうすればよいですか?

入ってくるパラメーターが問題ないと仮定するのは安全ではないと思いますが、検証は別のレイヤーに分離する必要があると思いましたか?

たとえば、クラスが開始時間と終了時間を取る場合、クラスが必要とするものは次のとおりです。

  • start_time両方ともend_time有効な日時オブジェクトです
  • start_time前にあるはずですend_time

クラスコンストラクターで検証しても問題ないものに関する指示、および検証を行う場所に関する一般的な情報があれば役立ちます。

MVC 構造を使用しようとしていることに注意してください。

4

2 に答える 2

0

質問にの両方のタグを付けました。どちらも大まかに型付けされた言語であり、変数と組織を特定の型にする必要はありません。これらの値をどうするかにもよりますが、それで問題ありません。それ以外の場合は、確認する必要があります。そうしないと、コードでエラーが発生します。そして、両方の言語がそれを行う方法を提供します。

あなたの質問に答えるには:はい、コンストラクターでデータを検証しても問題ありません。しかし、それは退屈で厄介でもあるので、どこでもそうしないでください. 正確にそれを行うべきかどうかは、コードの構造と、より高いレベルでエラーと例外を処理する方法によって異なります。

于 2012-08-30T03:41:45.880 に答える
0

データの検証は、モデル層の一部であるドメイン オブジェクトの責任です。

いいえ、コンストラクターに計算を入れるべきではありません。コンストラクターは、値をローカル変数にのみ割り当てる必要があります。settersで情報を検証するか、別の public メソッドを使用して検証する必要があります。

また、検証をデータ整合性チェックと混同しないでください ( 「ユーザーには一意の電子メールが必要です」など)。これらは、ストレージ抽象化構造 (データ マッパーなど) によって実行されるか、ストレージ メディアによって強制される必要があります。ドメイン オブジェクトからの情報を保存するときに、ストレージの抽象化構造でエラーが発生する場合があります。その場合、ドメイン オブジェクトにエラー状態を割り当てます。

アプリケーションの構造によっては、エラー状態 (検証の問題とデータ整合性の競合の両方が原因で発生したもの) が不適切に処理されたり、一時的にどこかに保存されたりすることがあります。たとえば、セッション中です。

于 2012-08-30T11:18:40.510 に答える