いつか作ります RSSフィード

2009-04-04

コントローラでバリデーション 22:50 コントローラでバリデーション - いつか作ります を含むブックマーク はてなブックマーク - コントローラでバリデーション - いつか作ります コントローラでバリデーション - いつか作ります のブックマークコメント

そもそもRubyistではないし*1、フレームワークは使っていないのでRailsの流儀は分からないのだけれど、個別のバリデーションをモデルっつうか抽象データ型クラス側に置き、それらを統合する責任はコントロール側に持たせる、というコードは良く書く。

つまり、コントローラ*2がリクエスト全体のバリデーションを行なうのだが、その中での、例えばPOST変数mailのバリデーションは、 MailAddress::validate($request->post('mail')) のように他のクラスに丸投げする形で実装する。コントローラの責任で、モデルに処理を委託する、という感覚。

というか、素朴に考えると、入力値検証は「制御」の範疇なのだから、コントローラの責任で取り扱うべきだと思う。モデルでやってるのは、「何が正しいのか」をモデルしか知らないからであって。だからその実装部分だけをモデル側に投げて、バリデーションの制御だけをコントローラ側に切り出そう、と考えてたらこういうコードに行き着いた。

この辺はフレームワークごとに権限範囲が結構フリーダムな感じなのでなんとも。コントローラと称するものがディスパッチしかせず、謎の中間層がコントロールするフレームワークとかもあるし。アクション層があるならアクションなのかな。とにかく「処理」を示すクラスがあるならばそいつに任せる。これがモデルであることもあるのかな。俺の中での「モデル」は、一義的には「オブジェクト指向モデリング」という時のモデル以外の何物でもないので、こういう構造には違和感があるのだけれど。

*1:違うんだ!仕事で使ってないだけで心はRubyとともにあるnだくぁwせdrftgyふじこlp;

*2:MVCの3層で言えばC、というだけで、実装はコントローラから呼ばれる別のクラスが行なう

tsuyoshikawatsuyoshikawa2009/04/05 20:28fukkenさん。はじめまして。トラックバックありがとうございます。
なるほど、バリデーションを行う主体という観点が普通に私には抜けており、目から鱗です。かなり合点がいきました。

続きは引用させて頂きつつ、追記のかたちで元エントリに纏めたいと思っております。(頭の中で膨らんできてしまったので)

あと、関係ないのですが、最近twitterをはじめたので、フォローさせて頂きます。

どうもありがとうございました。

新着エントリは上に追加。コメントは「はてなユーザのみ」、公開設定はパブリック (だれでも閲覧ができます)。