[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