atv
Новичок
Разговор сильно ушёл в сторону, и я хочу немного вернуться к теме ORM.
Я скажу чего бы я хотел от ORM. Я не хотел бы беспокоиться о синхронизации данных. Ведь объект содержит копию данных, соответственно, изменения в БД никак не отразятся в объекте. Т.е. хотелось бы, чтобы объект был как бы ссылкой на запись БД. Имея на руках только SQL реализовать подобное, мягко говоря, тяжко.
Немного удобнее стало работать с БД после появления курсоров, однако этого недостаточно. Вот если бы в БД были события, связанные с добавлением, изменением и удалением записей, и можно было вешать на них свои обработчики, это в корне изменило бы ситуацию и упростило бы реализацию ORM. Именно эти события я имел ввиду. А то что написал whirlwind, это немного не то.
Как бы я хотел работать с ORM.
Хочется, также, чтобы можно было начинать работу с любой сущности, и уже от неё по ссылкам плясать дальше. Например, начали со списка $orders и из него пошли на покупателя $cust = $orders[1]->customer, и дальше если нужно, $cust->city, или обратно на список заказов $cust->orders, но уже для этого пользователя.
Самое интересное, что нынешним ORM приходиться отчасти дублировать БД, им также нужно следить за связями таблиц, не мешало бы следить за целостностью данных, так как это необходимо для генерации событий. И даже события есть в БД - триггеры, только в таком виде они малопригодны.
Я скажу чего бы я хотел от ORM. Я не хотел бы беспокоиться о синхронизации данных. Ведь объект содержит копию данных, соответственно, изменения в БД никак не отразятся в объекте. Т.е. хотелось бы, чтобы объект был как бы ссылкой на запись БД. Имея на руках только SQL реализовать подобное, мягко говоря, тяжко.
Немного удобнее стало работать с БД после появления курсоров, однако этого недостаточно. Вот если бы в БД были события, связанные с добавлением, изменением и удалением записей, и можно было вешать на них свои обработчики, это в корне изменило бы ситуацию и упростило бы реализацию ORM. Именно эти события я имел ввиду. А то что написал whirlwind, это немного не то.
Как бы я хотел работать с ORM.
PHP:
$customers = new CustomerList();
$orders = new OrderList();
// то что это связанные списки, должно быть известно системе
$customers->setFilter('name = "John"');
// чтобы применение фильтра отразилось бы на списке $orders
$orders-> setFilter('date > 12.9.2005');
// опять же, применение фильтра коснулось списка покупателей,
// а также, чтобы очерёдность применения фильтров не имела значения
foreach($castomers as $cust) {
$orders = $cust->orders;
}
// чтобы была отложенная загрузка
foreach ($orders as $order) {
$cust = $order->customer;
}
// чтобы были взаимные ссылки между списками
Самое интересное, что нынешним ORM приходиться отчасти дублировать БД, им также нужно следить за связями таблиц, не мешало бы следить за целостностью данных, так как это необходимо для генерации событий. И даже события есть в БД - триггеры, только в таком виде они малопригодны.