Mercurial > pub > Impl
diff Lib/IMPL/ORM.pm @ 79:2d1c3f713280
ORM concept in development
author | wizard |
---|---|
date | Mon, 05 Apr 2010 00:20:34 +0400 |
parents | 16ada169ca75 |
children | 4267a2ac3d46 |
line wrap: on
line diff
--- a/Lib/IMPL/ORM.pm Fri Apr 02 20:19:17 2010 +0400 +++ b/Lib/IMPL/ORM.pm Mon Apr 05 00:20:34 2010 +0400 @@ -35,89 +35,48 @@ 1; __END__ + =pod + +=head1 NAME + +C<IMPL::ORM> - Object Relational Mapping + =head1 SYNOPSIS -use IMPL::ORM::Sql; +=begin code -my $DB = new IMPL::ORM::Sql("connection string"); +my $ds = IMPL::ORM::Storage::DBIC->new('My::Data',$dsn,$user,$pass,{Autocommit => 1}); + -local $IMPL::ORM::Depth = 1; # load childs only, no more - -my $artist = $DB->Lookup( Artist => { name => 'Beatles' } ); +my $foo = $ds->Insert( + My::Data::Foo->new( + 'foo class' + ) +); -my $order = new Order(); -$order->AddItem($_) foreach $artist->Albums->List; +my $bar = $ds->Insert( + My::Data::Bar->new( + 'bar class' + ) +) + +$bar->fooObject($foo); + +$ds->Save($bar); -$DB->Save($order); +my $fooOther = $ds->Retrieve( + 'My::Data::Bar', + { + name => 'bar class', + fooObject => { + name => 'some foo' + } + } +) -my $label = $artist->Albums->Index(0)->Label; - -$DB->Populate($label); #load $label +=end code =head1 DESCRIPTION -=head2 MEMBERS -=level 4 -=back -=head2 Variables -=head2 INTERNALS -=head3 Object Representation -Каждый класс отображаемый в источник данных представляется в виде набора -сущностей, каждая из которых представляет состояние базового класса. - -Foo entityFoo - Bar entityBar - Baz entityBaz - -При сохранении виртуальных свойств классов в соответствующих сущностях заводится -два поля - одно под сохранение собственного значения свойства, другое - для -хренеия виртуального значения. - -Foo - public virtual property Name => prop_all, {Type => String}; - -entityFoo - string m_Name - собственное значение - string v_Name - вртуальное значение - -Каждый сохраненный объект в базе имеет собственный идентификатор. -Новые объекты идентификатора не имеют, до тех пор пока они не будут сохранены. - -=head3 Object Cache - -Для учета объектов, которые присутствуют в источнике данных используется кеш -объектов. Сюда попадают полученные из базы объекты, а также вновь добавленные -объекты. - -ObjectInfo => { - instance => weak ref - _id => data source dependent id - state => {persistent|null|new|deleted} - work_unit => ref to the work unit where object is acting -} - -данная структура доступна через две функции ObjectInfoById и ObjectInfo - -=head3 Type mapping - -Источник данных имеет в себе схему данных, которая определяет набор типов, -хранимых в данном источнике. Есть несколько видов отображения типов: - -=level 4 - -=item 1 - -Отображение классов, когда класс рассмаривается в иде набора свойств - -=item - -Отображение классов в одно значение (напрмер строку, данные и т.п.) - -=item - -Классы, которые на прямую работают с источником данных, такие как коллекции. - -=back - -=cut +=cut \ No newline at end of file