我想使用OO提供类似于perl DBI的接口

时间:2012-01-10 03:29:42

标签: perl

我想编写一个DBI包装器,提供select / insert / update / delete,用户可以选择使用哪个数据库。我对于OO非常陌生,我不知道我做得对不对?你能复习一下,告诉我吗?任何建议都表示赞赏。

我的包装目录如下:

MyDBI.pm
MyDBI/SQLite.pm
MyDBI/MySQL.pm

MyDBI.pm:

package MyDBI;
sub new {
    shift; # discard parent class
    my $database=shift || 'MySQL';
    eval {
      require "MyDBI/$database.pm";
    } or die "$database not found\n";

    my $self="MyDBI::$database"->new;
    bless($self,"MyDBI::$database");
    return $self;
}
sub insert { print "parent insert"; } # children will override it

MyDBI / MySQL.pm:

package MyDBI::MySQL;
require MyDBI;
@ISA=qw(MyDBI);
use DBI;use DBD::mysql;
sub new { #...} # not special
sub insert { print "mysql insert"; }

用户脚本:

use MyDBI;
my $dbi=MyDBI->new('SQLite');
$dbi->insert;

这会起作用吗? MyDBI :: new与perltoot不同,我现在还不太了解它,只需复制并模拟它。

感谢。

1 个答案:

答案 0 :(得分:3)

如果您正在寻找一个ORM,其中db表和记录映射到对象,并提供插入,更新和选择等数据操作方法,请参阅DBIx::ClassRose::DB::Object。每个都有它的优点和缺点,但Rose :: DB :: Object可能稍微容易上手。