2010年5月24日月曜日

RESTっぽいHTMLフォームについて考えてみる

RESTのようなHTMLフォームについて考えてみた。
何を言いたいのか上手に説明できないので例を使って説明してみる。

◆まずは下記のようなHTMLフォームがあったとして・・・


<form name="html_form" method="post" action="users/put/1234">
  <input type="..." name="user_name" value="my_name">

あるRDBの「users」というテーブルで、プライマリキーが「1234」のデータの「user_name」という項目を書き換えるフォーム、だとする。

これを、次のように書いてみたい。

<form name="html_form" method="post" action="restic">
  <input name="restic[users][put][1234][user_name]"
    value="my_name">
  <input name="restic[users][put][1235][user_name]"
    value="my_name">

要するに変数名に色々な情報を入れ込んでみた。

こう書けるなると、IDが「1235」の修正も一度に出来る。
別テーブルの修正も簡単に入れ込むことが可能になる。
<input name="restic[addr][put][1234][address]"
    value="my_addr">

◆何に使うのかというと、

一度に複数のデータを登録・修正・削除するようなUIが必要な時に便利かな、と。エクセルのような表形式に大量のデータを一覧表示するようなケース。

ひとつのフォームで、データの新規登録、既存データの修正、既存データの削除、が入り乱れたりするような場合。

今まで一度に一レコードのCRUD(登録・修正・削除・読込)だったけど、少しずつ複雑怪奇なUIが求められるようになって来た。毎度ロジックを書くのだけど、複雑なUIに対応すると、「ロジックが汚くなる」のが嫌で嫌で。クリーンな方法はないかと考えて出てきた。

◆一般化すると、フォームの変数から受け取る内容は:

restic[ scheme ][ model ][ method ][ id ][ column ] = value;

と書けることになる、と思う。

ここで、
  • schemeはオブジェクトの大雑把な分類(データベース名とか)、
  • modelがオブジェクトのインスタンス(テーブル名とか)、
  • methodがCRUDに対応、
  • idでレコードのキーを指定、
  • columnのデータ項目にvalueを設定する、
といった感じ。
実装する場合、schemeやmodelあたりは省略するかも、かな。
削除の場合はcolumnは不要、新規登録の場合のidの処理も要検討でしょう。

ともあれ、これで、一つのHTMLフォームで複数のデータを処理可能になる。

◆こういう考え方はすでに存在するのだろうか?

ちょっとウェブを調べた限りでは見つからなかったけど、自分の不勉強=知らないことの多さに気がめいる。ちょっと考えただけで、アクティブレコード、O/Rマッピング、など聞きかじっただけ、実装を見たことすらない。

ともあれ、これで、本当に開発が簡単になりそうなら、実装してみようかと考えている。

0 件のコメント: