3

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 を実行することはできるだけ避けたいと考えています。

どんな助けでも大歓迎です:-)

4

1 に答える 1

2

より慣用的な方法で同様のエレガンスを実現する代替 perl パターン

ロールはミックスインを凌駕します。

オブジェクト レベルだけでなく、パッケージ レベルでもサブルーチンを継承する機能

通常、ロールはパッケージ レベルで使用されますが、トリックを使用してインスタンスのみに適用することもできます。(どのように修正しますか?)

現在のパッケージのスコープ内で「使用」時にコードを実行する機能

import

「use」で実行されるコードに現在のパッケージを渡す

ステートメントのすべてのパラメーターは、引数としてuse渡されimportます。

Perl でのメタプログラミングのガイド

Moose::マニュアルMoose::クックブック

モックアダプター、DB2、および MySQL の簡単な作成をサポートする既存の宣言型 ORM ライブラリー

DBIx::クラス

于 2012-05-19T09:37:25.453 に答える