comparison 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
comparison
equal deleted inserted replaced
78:a5cb84374d40 79:2d1c3f713280
33 } 33 }
34 34
35 35
36 1; 36 1;
37 __END__ 37 __END__
38
38 =pod 39 =pod
40
41 =head1 NAME
42
43 C<IMPL::ORM> - Object Relational Mapping
44
39 =head1 SYNOPSIS 45 =head1 SYNOPSIS
40 46
41 use IMPL::ORM::Sql; 47 =begin code
42 48
43 my $DB = new IMPL::ORM::Sql("connection string"); 49 my $ds = IMPL::ORM::Storage::DBIC->new('My::Data',$dsn,$user,$pass,{Autocommit => 1});
44 50
45 local $IMPL::ORM::Depth = 1; # load childs only, no more
46 51
47 my $artist = $DB->Lookup( Artist => { name => 'Beatles' } ); 52 my $foo = $ds->Insert(
53 My::Data::Foo->new(
54 'foo class'
55 )
56 );
48 57
49 my $order = new Order(); 58 my $bar = $ds->Insert(
50 $order->AddItem($_) foreach $artist->Albums->List; 59 My::Data::Bar->new(
60 'bar class'
61 )
62 )
51 63
52 $DB->Save($order); 64 $bar->fooObject($foo);
53 65
54 my $label = $artist->Albums->Index(0)->Label; 66 $ds->Save($bar);
55 67
56 $DB->Populate($label); #load $label 68 my $fooOther = $ds->Retrieve(
69 'My::Data::Bar',
70 {
71 name => 'bar class',
72 fooObject => {
73 name => 'some foo'
74 }
75 }
76 )
77
78 =end code
57 79
58 =head1 DESCRIPTION 80 =head1 DESCRIPTION
59 =head2 MEMBERS
60 =level 4
61 =back
62 =head2 Variables
63 =head2 INTERNALS
64 =head3 Object Representation
65
66 Каждый класс отображаемый в источник данных представляется в виде набора
67 сущностей, каждая из которых представляет состояние базового класса.
68
69 Foo entityFoo
70 Bar entityBar
71 Baz entityBaz
72
73 При сохранении виртуальных свойств классов в соответствующих сущностях заводится
74 два поля - одно под сохранение собственного значения свойства, другое - для
75 хренеия виртуального значения.
76
77 Foo
78 public virtual property Name => prop_all, {Type => String};
79
80 entityFoo
81 string m_Name - собственное значение
82 string v_Name - вртуальное значение
83
84 Каждый сохраненный объект в базе имеет собственный идентификатор.
85 Новые объекты идентификатора не имеют, до тех пор пока они не будут сохранены.
86
87 =head3 Object Cache
88
89 Для учета объектов, которые присутствуют в источнике данных используется кеш
90 объектов. Сюда попадают полученные из базы объекты, а также вновь добавленные
91 объекты.
92
93 ObjectInfo => {
94 instance => weak ref
95 _id => data source dependent id
96 state => {persistent|null|new|deleted}
97 work_unit => ref to the work unit where object is acting
98 }
99
100 данная структура доступна через две функции ObjectInfoById и ObjectInfo
101
102 =head3 Type mapping
103
104 Источник данных имеет в себе схему данных, которая определяет набор типов,
105 хранимых в данном источнике. Есть несколько видов отображения типов:
106
107 =level 4
108
109 =item 1
110
111 Отображение классов, когда класс рассмаривается в иде набора свойств
112
113 =item
114
115 Отображение классов в одно значение (напрмер строку, данные и т.п.)
116
117 =item
118
119 Классы, которые на прямую работают с источником данных, такие как коллекции.
120
121 =back
122 81
123 =cut 82 =cut