ValidationContextの保存

数日前、Jimmy Nilssonが現在執筆している原稿を読んでいてこのことを思い出した。彼は、たとえエラーがあったとしても、オブジェクトは常に保存されなければならないと述べていた。これはさすがに極端な話で、私も同意しかねるのだが、必要以上に保存を規制しているのは確かだろう。

僕が抽象的なことを書くと話が明後日な方向に行ってしまいがちなので、あまり書かないようにしているけど、これは僕にとってはタイムリーだったので書いてみる。


色々なデータを保持するオブジェクトがあって、それをValidationしてから幾つかのテーブルに放り込むシステムがある。色々なデータを保持しているので、Validationの対象となる項目も結構あるし、状況によっていくつもパターンがある。ユーザが初心者でシステムになれていない場合は、Webアプリだろうが何だろうが途中で保存したくなるのが人情だ。でも保存前にValidationをしてそれをパスしたデータしか保存できないとすると、ユーザが入力したデータに不備があった場合保存できない。


初心者じゃなくてもこれは当てはまる。例えば忙しい営業にはいろんなところから電話がかかってくるだろう。入力の途中にややこしいお金の話なんかがかかってきたら、何を入力していたのかを忘れてしまう。ウィンドウを閉じてしまうかもしれない。例えばGMailなどのWebメールなら途中で保存できるのは当たり前で、メール送信時にチェックする。なぜメーラーはいつでも保存できて、業務アプリはValidationを通らないと保存できないという仕様でOKだと、自分が思っていたのかが少し不思議だ。


ContextualValidationのContextをどの程度のスパンで捉えるかにもよるけど、僕はこれまでDBにValidationのContextを保存するっていう風に考えたことがなかった。でも入力途中のなオブジェクトを保存するためにコンテキストも保存してもいいんじゃないの?と思い始めたら、そっちの方が自然かもと思えてきた。