[Moscow.pm] Moose и Object Persistens
Aliaksandr Zahatski
zahatski на gmail.com
Вт Май 18 04:14:00 PDT 2010
Привет !
Использую собственное решение (Collection::AutoSQL).
В моем случае группы объектов отображаются, каждая в свою отдельную
таблицу, например: пользователи в таблице users и каждый из объектов
имеет свой ключ ( идентификатор) в базе.
Свойства:
- интерфейс доступа: CRUD (create, fetch, store, delete ), прозрачно
можно переключиться на другое хранилище,
- после извлечения записи, определяется метод для создания объекта
для данного ключа
- созданные объекты кэшируются по ключу
- используется ActiveRecord, поэтому все изменённые объекты
сохраняются автоматически по вызову метода : $collection->store() в
конце работы логики.
- нет никаких JOIN, логика формирования запросов предельна проста.
Пример взят из документации:
HAVE mysql table:
mysql> \u orders
mysql> select * from beers;
+-----+--------+-----------+
| bid | bcount | bname |
+-----+--------+-----------+
| 1 | 1 | heineken |
| 2 | 1 | broadside |
| 3 | 2 | tiger |
| 4 | 2 | castel |
| 5 | 3 | karhu |
+-----+--------+-----------+
5 rows in set (0.00 sec)
my $beers = new Collection::AutoSQL::
dbh => $dbh, #database connect
table => 'beers', #table name
field => 'bid', #key field (IDs), usually primary,autoincrement
cut_key => 1; #delete field 'bid' from readed records,
my $heineken = $beers->fetch_one(1);
#SELECT * FROM beers WHERE bid in (1)
print Dumper($heineken);
...
$VAR1 = {
'bcount' => '1',
'bname' => 'heineken'
};
...
$heineken->{bcount}++;
my $karhu = $beers->fetch(5);
#SELECT * FROM beers WHERE bid in (5)
$karhu->{bcount}++;
$beers->store;
#UPDATE beers SET bcount='2',bname='heineken' where bid=1
#UPDATE beers SET bcount='4',bname='karhu' where bid=5
Доступно на CPAN'e: http://search.cpan.org/perldoc?Collection::AutoSQL
18 мая 2010 г. 14:16 пользователь Андрей П. Ковбович
<akovbovich на gmail.com> написал:
>
> Но... что делать с хранением объектов в реляционных БД?
>
> - Создавать свой O/R маппер под каждую сущность модели?
> - Возлагать ответственность по хранению своего состояния на сами объекты?
> - ???
>
> Кто как решает эту задачу?
>
Подробная информация о списке рассылки Moscow-pm