mixlone を実装していく前に Ruby on Rails とその背景について軽くおさらいしておきます。 Ruby on Rails には Key となる Component が 2 つあります。
Model-View-Contoroller Pattern で言うところの Model 担当。
いわゆる ORM(Object-Relational Maping)。 Java で言うところの Hibernate とか JPA とか 。 .NET で言えば ADO.NET か。
他の ORM と比較しての一番の特徴は “(ほぼ)設定不要” 。
たとえば以下のようなテーブルがあるとすると、
CREATE TABLE products ( id int(11) NOT NULL auto_increment, name varchar(255), PRIMARY KEY (id) );
最低限必要なコードは、
class Product < ActiveRecord::Base; end
だけ。
これだけでこんなことができるようになる。
# あたらしい Product を登録 product = Product.new product.name = "Product Name" product.save
# Product を探し名前を更新 product = Product.find(:first, :conditions => "name = 'Old Product'") product.name = "New Product" product.save
Active Record が背後でテーブルの情報を調べて setter や getter を準備してくれる。
EJB 2.1 の EntityBean なんかと比較すると涙が出てくるくらい簡単。
でもこんだけじゃ使い物にならないじゃん、などとは思うことなかれ。当然、リレーションの設定も、ヴァリデーションの設定も、数行追加するだけで出来るようになる。
詳細は以下のドキュメント参照。
Model-View-Controller Pattern で言うところの View と Controller 担当。
View を担当する Action View と Controller を担当する Action Controllers がセットになって Action Pack 。
Java で言うところの Struts Model 2 を実現するためのもの。 ASP.NET で言えば code behind を実現するためのもの(?)。
Action Pack では URL から実行する Controller/Action を決定する仕組みになっている。
例えば http://mixlone.jp/ が base directory として、
http://mixlone.jp/xxx/yyy
という URL へのリクエストあったときは XxxController というクラスの yyy というメソッドを実行する、という暗黙のルールがあるので app/controllers/xxx_controller.rb に、
XxxController < ActionController::Base def yyy # なにか処理を行う end end
というクラスを定義すれば http://mixlone.jp/xxx/yyy にアクセスしたとき実行されるようになる。
でそんとき自動的に app/views/xxx/yyy.rhtml を探してもしあったらそのファイルを View として利用するようになっている。
Action メソッドから View へはインスタンス変数が渡されるので、 Action メソッドでビジネスロジックを実行して View ではそれを表示する場所だけを指定するようなかたちになる。
当然、フォームを扱ったり、 View の部品化(Struts Tiles みたいな)をしたり、すべての Action メソッドの前に実行するメソッドとか後に実行するメソッドとかを定義できたり、いろいろ出来る。
詳細は以下のドキュメント参照。
