谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

Verificationについて

このorderメソッドの中で、itemオブジェクトの属性に
矛盾がないかどうかの整合性チェック(Verification)を行ないます。

Webアプリケーションを作るなら、まずサービス設計をする。 - 谷本 心 in せろ部屋

なにげにVerificationと書きましたが、
これについて、以前も書いたことがあります。
http://d.hatena.ne.jp/cero-t/20070731/1185892239


要するに、バリデーションは「ユーザビリティ向上」のためと捉えて、
それ以上のものは、全部Verificationで行ないます。


Verificationまで到達した段階で、
想定される用途で使っていたユーザーには、正常にデータをコミットさせますが
悪意を持って、あるいは意図しない操作を行なったユーザーには、エラーを返します。


ただ、Verificationのコードは、バリデーションとほとんど同等になってきます。
Serviceにバリデーションと同じようなチェックコードを書くのは
非効率に感じるかも知れません。


それでも、Verificationさえ行なっておけば、
hiddenタグのチェックとか、ドロップダウンリストの選択肢にない値を選んだ時とか
ブラウザの戻ると進むを駆使して値を強引に書き換えた時とか、
そんな想像外の異常系について、イチイチ対策を採る必要がなくなります。


たとえ自分の想像を超える異常系に直面した時でも、
「確かにそういう操作はできますが、エラーが発生し、
 DBには書き込まれないので、大丈夫です」
と、説明しやすいのです。