MochiKitでAOP

もう一週間も前になっちゃったけど、id:brazilさんのMochiKitAOPするコード。MochiKitも使いたいなー。デモ見るといい感じなんだよなー。

JavaScriptオブジェクト指向アスペクト指向を過度に追うことは、パソコンでファミコンをやるようなもので、下位レベルの一つのパターンに過ぎない概念をエミュレートするようなことだと感じていて、一級のアイテムとして大げさに扱いたくないなぁと、ちょっと思いました。

これはもう仰るとおりで、僕もデバッグ時にメソッドの呼び出しをトレースするために書いたのが一番の理由です。今後も積極的に使うことはないはず。あるとたまに便利っていうぐらいっすね。

モデルの属性のデフォルト値

テーブルはnull不可にしといてvalidates_presence_ofで値が設定されていない場合にエラーが出るようにしたい。モデルのデフォルト値は、各AdapterでDBのテーブルから取得したカラムの情報を元につくられたColumnオブジェクトのdefaultが使用されるので、MySQLの場合、マイグレーションで :null => false を指定すると :default => nil は無視されて、テーブルのカラムのデフォルト値は0となる。するとモデルの属性のデフォルト値も0になるのでvalidates_presence_ofに引っ掛からない。


テーブルのレコードのデフォルト値とモデルのデフォルト値を対応しないものにする、っていうのはダメなのかなとも思った。


でも、やっぱりvalidates_presence_ofに引っ掛かって欲しいので、attributes_from_column_definitionをオーバーライド*1して、superの戻り値に自前のデフォルト値を設定するのが良さ気に思えたんで、やってみたらうまくいっちゃった。


これでいいのかな?何か間違っている気がする。

*1:initializeをオーバーライドすればいい気もするけど、initializeだと引数のattributesに指定されている値も考慮しないといけないのでスマートじゃない気がした