やっぱり時間をおいて改めて考えるって大事ですね。
なぜ Post クラスの定義は空でよいのか?
Post クラスはmodel部分を担うです。Rails における model は(誤解を恐れずに言うと)その Rails アプリケーションで使うデータの表現です。ということは、「Postとはどんなデータなのか?」を表現しているはずです。Javaの人の感覚なら、そのデータを構成する属性がクラスのインスタンス変数として宣言されているのが自然に思えます。でも、空です。ActiveRecord::Base を extend している部分を除いて。
その部分が重要なんだろうと思って、ActiveRecord::Base の API ドキュメントを見てみると Posts クラスが空の定義で済む理由が何となく分かりました。一行目で。
APIドキュメントから引用:
Active Record objects don’t specify their attributes directly, but rather infer them from the table definition with which they’re linked. Adding, removing, and changing attributes and their type is done directly in the database.要するに、「そのクラスに対応しているデータベースのテーブル定義を見て、そのクラスを構成する属性を推定している」ということだったようで、クラスにインスタンス変数の宣言などが必要ない理由が何となく分かりました。他の "Adding, removing, and changing ..." の部分がいかに実現されているのかが理解できたら、「しっかり分かった」っていうことにします。
# 分かっている人っぽく表現すると「それって Object-Relation Mapping だよね?」
あと、「もっと詳しい(例の載った)ドキュメント」としてREADMEも挙げてあったので、そのうちきちんとフォローしたいと思います。こちらは例が豊富なので、「なぜ動作するのか」よりも「いかに使うのか」に重点を置いた感じになっているので、自分でプログラムを作る際の参考にするべきドキュメントかなあ、と。
0 件のコメント:
コメントを投稿