3

我正在尝试创建一个用于 Mojolicious Web 应用程序的小型 ORM 库。我已经非常喜欢 Ruby 的 Datamapper 库,如果可能的话,我想模仿它的一些行为。

在 Datamapper 中,您可以混合 Resource,然后将方法添加到您的类中,例如“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 模式
  • 能够在包级别以及对象级别继承子例程
  • 能够在当前包的范围内执行“使用”代码,或
  • 将当前包传递给在“使用”时执行的代码
  • Perl 元编程指南
  • 一个现有的声明式 ORM 库,支持轻松创建模拟适配器以及 DB2 和 MySQL

理想情况下,我想尽可能避免在大字符串上运行 eval 。

任何帮助将不胜感激 :-)

4

1 回答 1

2

以更惯用的方式实现类似优雅的替代 perl 模式

角色超越了 mixins。

能够在包级别以及对象级别继承子例程

角色通常在包级别使用,但也可以仅将技巧应用于实例。(FIXME怎么样?)

能够在当前包的范围内执行“使用”代码

import

将当前包传递给在“使用”时执行的代码

语句中的所有参数use都作为参数传入import

Perl 元编程指南

Moose::Manual , Moose::Cookbook

一个现有的声明式 ORM 库,支持轻松创建模拟适配器以及 DB2 和 MySQL

DBIx::类

于 2012-05-19T09:37:25.453 回答