имеется выборка из БД
{
name => 'name',
point => '{ x: 1, y: 2 }'
}
далее класс
package Point;
use Mouse;
require JSON::XS;
has x => is => 'ro', isa => 'Num';
has y => is => 'ro', isa => 'Num';
sub jstr {
my ($class, $str) = @_;
my $json = JSON::XS->new->decode( $str );
return $class->new(x => $json->{x}, y => $json->{y});
}
package Obj;
use Mouse;
use Mouse::Util::TypeConstraints;
coerce Point
=> from 'Str',
=> via sub { Point->jstr( $_) };
has name => is => 'rw', isa => 'Str';
has point => is => 'rw', isa => 'Point', coerce => 1;
из БД в поле point приходит нераспакованный JSON.
соответственно при помощи coerce мы его распаковываем прозрачно.
выборку из БД просто кормим конструктору Obj.
все красиво.
а теперь как сделать красиво чтобы обратно в БД записать?
кроме как сериализационный метод у Point есть какие-то
варианты?
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org