Как использовать Class:DBI с собственными конструкторами или объектно-ориентированными системами, такими как Moo(se)?

При использовании Class::DBI в Perl метод из Class::DBI действует как конструктор, возвращающий объект. Как я могу использовать Class::DBI в сочетании с атрибутами объекта, которые не являются частью каких-либо таблиц базы данных?

Например: я хотел бы, чтобы мойMusic::Artistкласс, чтобы иметьversionатрибут, который является частью результирующих объектов (чтобы я мог использовать этот атрибут объекта в своей общей логике приложения), но не записывается в базу данных?

В конечном итоге я хотел бы иметь возможность комбинировать использование Class::DBI с объектно-ориентированными системами, такими как Moo(se).

Пример кода Vanilla Class:DBI из :

      package Music::DBI;
use base 'Class::DBI';
Music::DBI->connection('dbi:mysql:dbname', 'username', 'password');

package Music::Artist;
use base 'Music::DBI';
Music::Artist->table('artist');
Music::Artist->columns(All => qw/artistid name/);


#-- Meanwhile, in a nearby piece of code! --#

my $artist = Music::Artist->insert({ artistid => 1, name => 'U2' });

Псевдокод того, что я хотел бы сделать:

      package Music::Artist;
use base 'Music::DBI';
use Moo;

Music::DBI->connection('dbi:mysql:dbname', 'username', 'password');
Music::Artist->table('artist');
Music::Artist->columns(All => qw/artistid name/);

has name => ( is => 'rw' );
has version => ( is => 'rw' );


#-- Meanwhile, in a nearby piece of code! --#

my $artist = Music::Artist->new( name => 'U2', version => '0.1.0' );

$artist = Music::Artist->insert({ artistid => 1, name => $artist->name });

# ... do something with $artist->version ...

(Хотя этот код мог работать, Class::DBI's insert()причины переопределяет объект, возвращаемый Moo's new()в первую очередь.)

Как объединить Class::DBI с собственными или сторонними (Moo) конструкторами?

метакпанаЯ читал документацию по Class::DBI , но не нашел никакой информации о том, как переопределить метод insert() как подход к предоставлению комбинированного метода конструктора. Я также пытался найти репозитории на GitHub, которые используют Class::DBI и собственные конструкторы или ОО-системы в тех же пакетах, но тоже безуспешно.

0 ответов

Другие вопросы по тегам