Mojolicious Web アプリケーションで使用する小さな ORM ライブラリを作成しようとしています。私は Ruby の Datamapper ライブラリがとても好きになり、可能であればその動作の一部をエミュレートしたいと考えています。
Datamapper では、Resource を mixin してから、「all」などのメソッドをクラスに追加できます。
# User.rb
class User
include Datamapper::Resource;
end
...
# Application.rb
users = User.all
私のライブラリでは、同様の動作を実現するために、基本モデルから継承するモジュールにいくつかのパッケージ レベルの機能を追加しようとしています。
本質的に、私は次のようなことをしたいと思っています:
# User.pm
package User;
use base Model;
...
# Application.pm
my @users = User::all();
perl でのメタプログラミングの例を探してみましたが、すぐに役立つものは見つかりませんでした。
私が求めているのは次のとおりです。
- より慣用的な方法で同様のエレガンスを実現する代替 perl パターン
- オブジェクト レベルだけでなく、パッケージ レベルでもサブルーチンを継承する機能
- 現在のパッケージのスコープ内で「使用」時にコードを実行する機能、または
- 「use」で実行されるコードに現在のパッケージを渡す
- Perl でのメタプログラミングのガイド
- モックアダプター、DB2、および MySQL の簡単な作成をサポートする既存の宣言型 ORM ライブラリー
理想的には、大きな文字列で eval を実行することはできるだけ避けたいと考えています。
どんな助けでも大歓迎です:-)