Как использовать 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 и собственные конструкторы или ОО-системы в тех же пакетах, но тоже безуспешно.