DRY原則とバリデーション機能


最近、よくDRY原則のことについて考えます。Don't Repeat Yourselfです。
Webアプリケーションでは、よくバリデーション機能を
クライアントとサーバーで同じものを実装します。
例えば必須チェックや相関チェックなど、クライアントでもやって、
サーバーでもやりますよね。


J2EEで一般的なのは、クライアントはJavaScriptで、
サーバーサイドはCommons-Validatorのようなチェック機能でしょう。
(個人的にこの辺りは独自なものを使ってることが多いですが・・・・)


でもそれってDRY原則に反しているような気がしてなりません。
重複して同一の機能を実装することは、保守性の観点からも良くありません。
片方に仕様変更が入れば、当然もう片方も同様に直さなくてはいけません。


クライアントサイド・サーバーサイドでは機能として、別のものと
考えるべきなのでしょうか・・・


当然、重要なのはお客さんからの要望なのでお客さんから
望まれれば当然実装します。しかし、両方書くのはDRY原則
反しているのであまりやりたくないところです。
じゃあ別案で、例えば自動生成するっていう方法もあると思いますが、
それでも自動生成する側・される側と二つできてしまうのに
代わりはありません。


うーーーむ、皆さんはどう考えていますか?と聞いてみたいところです(ーー;)