ФорумПрограммированиеPHP для идиотов → Профи обосрались? UnitOfWork, FK, insertID

Профи обосрались? UnitOfWork, FK, insertID

  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 11 августа 2010 г. 19:44, спустя 24 минуты 28 секунд

    Абырвалг между народный программер :)
    С возвращением, Пiха! hyperoff.ru - качественный хостинг php
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 11 августа 2010 г. 19:53, спустя 8 минут 41 секунду

    всё равно ORM не торкает. На любителя, короче
    не всё полезно, что в swap полезло
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 11 августа 2010 г. 20:26, спустя 33 минуты 18 секунд

    Мне AR в Yii нравится,
    $model = new News;
    $model->title = 'Title';
    $model->text = 'Text';
    $model->save();
    Спустя 18 сек.
    Это создает новую новость
    Спустя 78 сек.
    Старую так можно редактировать например:

    $model = News::model()->findByPk(2);
    $model->title = 'New title';
    $model->save();
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 11 августа 2010 г. 20:34, спустя 8 минут 18 секунд

    скоро начну изучать этот самый Yii
    С возвращением, Пiха! hyperoff.ru - качественный хостинг php
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 11 августа 2010 г. 20:49, спустя 15 минут 7 секунд

    Troy, ну это просто активрекорд, я в этом профита не вижу. А вот ORM позволяет удобно выбрать связанные записи, динамические фильтры всякие создавать.
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 11 августа 2010 г. 21:00, спустя 10 минут 26 секунд

    Абырвалг, там связанные тоже можно $posts=Post::model()->with('author')->findAll(); , мне нравятся валидаторы , типо как в джанге (может в других фрейморках еще лучше, хз) , ты указал тип , email например, а оно само уже занимается валидацией , а вместе с генераторами CRUD, модели, форм разработка становится очень быстрой
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 11 августа 2010 г. 23:12, спустя 2 часа 12 минут 35 секунд

    Troy, о, тогда норм. Жаль, что yii, сука, монолитный.


    Вот как он разрулил это дело.
    http://github.com/m4rw3r/RapidDataMapper/commit/f986e0d3e3baf0fb2ec4d6dbca6541cf940aa972
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 11 августа 2010 г. 23:38, спустя 25 минут 48 секунд

    ORM конечно выглядит симпатично, только в реальной жизни всё это очень неэффективно. © Закон дырявых абстракций :)

    Например есть таблица с 20 полями, в т.ч. BLOB-ы. Мне надо изменить одно поле. Например какой-то счетчик. Другие данные меня как бы не интересуют.
    Как действует типичный ORM:
    - определяем критерий (значение primary id)
    - получаем запись со всем барахлом (если в объектной модели есть связанные таблицы — возможно еще и их записи)
    - изменяем 1 значение из этой кучи
    - сохраняем всю хуйню.
    Кроме того, что ORM имеет свои накладные расходы на поддержание самого себя, он еще и лишние данные будет гонять туда-сюда.

    То же самое на истинном SQL выглядело бы просто UPDATE mytable SET cnt=cnt+1 WHERE id=123
    Я закладочку себе сделал на этот rapiddatamapper, только помоему это очередная академическая игрушка без будущего.
    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 11 августа 2010 г. 23:59, спустя 20 минут 29 секунд

    ну у доктрины ж и пропела есть будущее. Их многие используют.

    Смотри, у тебя всегда есть возможность спуститься до уровня native sql. Не канает, так как мы хотим абстракцию от типа БД? Окей, используем

    $Rdm_Adapter->update();

    	/**
    * Updates data in the database, returns a query object if no conditions are supplied.
    *
    * @see Rdm_Query_Update
    * @see Rdm_Query_Update::set()
    * @see Rdm_Query_Abstract::where()
    *
    * @param string|array Multiple tables can be updated with the same query
    * @param array Associative array with new data (sent to set())
    * @param mixed Sent to Rdm_Query_Abstract::where()
    * @return Rdm_Query_Update|int|false
    */
    public function update($table, $data = false, $conditions = false)
    {
    $ret = new Rdm_Query_Update($this, $table);

    if ($data) {
    $ret->set($data);
    }

    if ($conditions) {
    $ret->where($conditions);

    return $ret->execute();
    }
    return $ret;
    }


    тут тебе и абстракция от типа БД, спасибо QueryBuilder'у и нет дрюча с загрузкой всех данных о записи
    Спустя 96 сек.
    сравнение производительности с пропелом и доктриной

    http://github.com/m4rw3r/RapidDataMapper/blob/feature/new-api_di-variant/comparison_to_doctrine_and_propel.rst
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 12 августа 2010 г. 8:17, спустя 8 часов 18 минут 52 секунды

    artoodetoo, ОРМ, AR в первую очередь для увеличения скорости разработки, когда появляется нагрузка и тп, лучше все переписать на обычные SQL запросы
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 12 августа 2010 г. 8:19, спустя 1 минуту 41 секунду

    ну спасибо, что объяснили :)
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 августа 2010 г. 8:27, спустя 7 минут 54 секунды

    лол
    Сапожник без сапог
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 12 августа 2010 г. 8:58, спустя 30 минут 56 секунд

    artoodetoo, я хотел добавить "и ты это прекрасно знаешь" , но передумал)
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 12 августа 2010 г. 12:14, спустя 3 часа 15 минут 46 секунд

    у доктрины2 развитая система кеширования: кешируются результаты парсинга дескрипторов, запросов.

    В RDM вообще кодогенератор http://pastebin.mozilla-russia.org/106731
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 25 августа 2010 г. 0:37, спустя 12 дней 12 часов 22 минуты

    - определяем критерий (значение primary id)
    - получаем запись со всем барахлом (если в объектной модели есть связанные таблицы — возможно еще и их записи)
    - изменяем 1 значение из этой кучи
    - сохраняем всю хуйню.

    Наверное, для этого и нужен UnitOfWork, EntityManager, что бы отслеживать изменения

Пожалуйста, авторизуйтесь, чтобы написать комментарий!