2012-01-10 3 views
-2

DBI wrapper를 작성하고 select/insert/update/delete를 제공하고 사용자가 사용할 데이터베이스를 선택할 수 있습니다. 나는 perl에 매우 익숙하다. 나는 옳은 일을하고 있는지 잘 모른다. 그것을 검토하고 말씀해 주시겠습니까? 그리고 모든 조언을 부탁드립니다.OO를 사용하여 인터페이스와 같은 perl DBI를 제공하고 싶습니다.

같은 내 래퍼 디렉토리보기 :

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과 다르다. 지금 당장은 그것을 이해하지 못하고 그냥 복사하고 시뮬레이트한다.

감사합니다.

+2

Perl-DBI가 이미 객체 지향 모듈이라는 것을 고려할 때, 나는 당신이 원하는 것을 100 % 확신하지 못합니다. Perl-DBI는 당신이하고 싶은 모든 것을합니다. 당신이 무엇을하고 있는지 정확히 알 수 있습니까? 그런데, 당신이 OO-Perl을 배우고 싶다면 다양한 온라인 [Perl Tutorials] (http://perldoc.perl.org/index-tutorials.html)을 방문하십시오. 'perldoc' 명령을 통해 명령 행을 시작하십시오. –

+0

감사합니다. DBI 부분 만 잊어 버려. 내가 알고 싶은 최소한의 것은 MyDBI.pm의 새로운 하위 기능입니다. 또는 알 수없는 문제가 있습니까? – everbox

+0

오늘 OO perl을 시작한다면 [Moose] (https://metacpan.org/module/Mose)로 시작해야합니다. http://codereview.stackexchange.com/을 확인해보세요. – derobert

답변

3

db 테이블과 레코드가 개체에 매핑되고 insert, update 및 select와 같은 데이터 조작 방법을 제공하는 ORM을 찾으려면 DBIx::Class 또는 Rose::DB::Object을 참조하십시오. 각각 장단점이 있지만 Rose :: DB :: Object는 시작하기가 약간 쉬울 수도 있습니다.

관련 문제