Mercurial > pub > Impl
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 |