in reply to Algebraic data retrieval with DBIx::Array
But what good is cleaner code if you end up with circular references when you try to use DBIx::Simple in a simple has-a relationship?
The thing you complained about wasn't a has-a relationship, but a method that creates and returns a DBIx::Simple object, called in a chain. As you've previously demonstrated, this causes premature destruction. (One of the possible work-arounds is "don't do that, then", i.e. don't chain.) Even then, the way you used DBIx::Simple doesn't cause a circular reference. DBIx::Simple specifically avoids creating circular references; the "fix" that you suggested, however, would have created circular references. That's one reason that your suggested change was rejected.
A has-a works perfectly with DBIx::Simple and Moose. It does mean that the D::S object will remain in use as long as your Moose object is, but that's what has-a's are for, of course... :)
package Argh; use Moose; use DBIx::Simple; has 'db' => ( is => 'rw', isa => 'DBIx::Simple', lazy => 1, default => sub { DBIx::Simple->connect("dbi:SQLite::memory:") }, ); sub meh { my ($self) = @_; my $db = $self->db; say $db->query("SELECT 2 - 1")->list; say $self->db->query("SELECT 1 + 1")->list; } 1;
|
---|