За последние 24 часа нас посетили 18838 программистов и 1704 робота. Сейчас ищут 842 программиста ...

Doctrine - Open Source PHP ORM

Тема в разделе "Прочие вопросы по PHP", создана пользователем topas, 9 мар 2008.

  1. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Собственно сабж.

    Кто использует?
    Кто пользовался, но по каким-либо причинам отказался. Почему?
    Кто рассматривал этот вариант но отказался в пользу другой ORM.

    Все остальные могут ознакомится: phpdoctrine.org
     
  2. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
     
  3. Anonymous

    Anonymous Guest

    Отказался от ORM в пользу PHP. PHP слишком медленный для реализации ORM в реальных, даже средненагруженных приложениях. Для этого нужен хотя бы питон.
     
  4. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Участвовал в трех "реальных средненагруженных" проектах где использовалась одна самописная ORM, и ORM in onPHP...
    Memcached с легкостью окупает использование ORM. ИМХО
    А скорость и качество разработки "реальных" проектов увеличиваются за счет использования этой самой пресловутой ORM.

    Это опять таки ИМХО.

    Спорить ORM == true || ORM == false не вижу смысла. Я для себя выбор сделал в этом вопросе. Осталось выбрать реализацию. Написать что-то свое имеет конечно смысл, но только в том случае, если тебя что-то не устраивает в уже существующих реализациях. Ознакомился с Doctrine documentation и понял что если на практике так же хорошо как там описано, то это именно то что мне нужно.

    Отсюда возникает вопрос: кто что считает по поводу реализации PHPDoctrine как ORM.
     
  5. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    topas
    Советую покопать в направлении LIMB ActiveRecord. Изо всех реализаций имхо лучшая.
    ORM в onPHP видел (точнее, видел сам код и примеры использования)... имхо это страшный ужас а не ORM...

    UPD: Собственно вот они эти примеры - http://onphp.org/examples.Forum.en.html
    Кто разберется, тому пирожок с полки.
     
  6. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    нет... с ним работать конечно можно. Но сам факт того что ORM ищу в другом направлении, наверное о чем-то говорит.
     
  7. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    По поводу ORM и Memcached.
    Смотрите, что-бы не получилось ситуации, когда в memcache будет столько данных, что нагрузка пойдёт на сеть (если у вас memcached на отдельной машине, а это скорее всего так, ибо такого уровня проэкты одним WEB сервером не обходятся). В практике была ситуация, когда memcache занимал ~800 Mbit, пришлось срочно оптимизировать и убирать совсем лишнее. Благо у нас это было именно хранение всяких статусов и счётчиков - много что можно было переделать по другому и трафик уменьшили сильно. В случае же с ORM так уже не сделаешь, так что палка о двух концах.
     
  8. sword dancer

    sword dancer Активный пользователь

    С нами с:
    17 фев 2008
    Сообщения:
    295
    Симпатии:
    0
    Dagdamor, активные записи - это очень-очень частный случай орм.
    topas, предпочитаю не привязываться к орм-у, а делать ту объектную модель, какая требуется, а объекты уже напрямую к базе обращаются, через что-то навроде препарированного активрекорда.
     
  9. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Не знаю как с этим в Doctrine, но в onPhp предусмотрен разный уровень кэширования для разных объектов.
     
  10. sword dancer

    sword dancer Активный пользователь

    С нами с:
    17 фев 2008
    Сообщения:
    295
    Симпатии:
    0
    Psih, мемкэш, на то и мемкэш, что стоять должен на том же сервере, на котором происходит обработка запроса, чтобы не стучаться к бд через всю сеть.
     
  11. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    sword dancer
    Вобще-то memcache сетевой демон, а вот APC или XCache - именно локальные. К тому-же, если у тебя 10 WEB серверов, на каждом будет свой кеш для ORM!? o_O
     
  12. sword dancer

    sword dancer Активный пользователь

    С нами с:
    17 фев 2008
    Сообщения:
    295
    Симпатии:
    0
    на каждом будет стоять мемкэш для кэширования. через сеть можно и к базе стукнуться.
    то, что он использует сокеты в качестве интерфейса к другим программам, вовсе не означает, что его нужно сажать на отдельную машину.
     
  13. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Ребят, создайте пожалуйста тему "Где должен лежать memcache"
     
  14. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    sword dancer
    Ничего подобного. Active Record - это наоборот такое развитие ORM, при котором в частности есть поддержка связей между таблицами. ORM = привязка объекта к записи из таблицы, и ничего более.
     
  15. sword dancer

    sword dancer Активный пользователь

    С нами с:
    17 фев 2008
    Сообщения:
    295
    Симпатии:
    0
    небольшой ликбез для знатоков:
    orm - это отображение объектной модели предметной области на реляционную. качество отображения ( нормальность, эффективность ) напрямую зависит от качества orm ( полнота набора паттернов отображения, оптимизация запросов, кэширование )
    active record - представление реляционной информации в виде объектов. полученные объекты, при этом, не имеют ничего общего с объектами предметной области ( кроме простейших частных случаев ).
     
  16. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    sword dancer
    Гм... виноват.
    Но в сторону LIMB AR все же советую покопать, ибо все качества ORM там присутствуют.
     
  17. sherman

    sherman Активный пользователь

    С нами с:
    26 апр 2008
    Сообщения:
    1
    Симпатии:
    0
    Не ту ссылку дали. Более менее актуальный пример тут: http://gabaidulin.livejournal.com/64485.html

    Могу еще кусок реального кода привести:

    Код (Text):
    1.  
    2.                     Criteria::create(Banner::dao())->
    3.                     setDistinct()->
    4.                     add(
    5.                         Expression::eq(
    6.                             'state',
    7.                             BannerState::ACTIVATED
    8.                         )
    9.                     )->
    10.                     add(
    11.                         Expression::andBlock(
    12.                             Expression::eq(
    13.                                 'campaign.type',
    14.                                 CampaignType::COMMERCE
    15.                             ),
    16.                             Expression::eq(
    17.                                 'campaign.state',
    18.                                 CampaignState::ACTIVATED
    19.                             )
    20.                         )
    21.                     )->
    22.                     add(
    23.                         Expression::orBlock(
    24.                             Expression::gt(
    25.                                 'campaign.limit',
    26.                                 0
    27.                             ),
    28.                             Expression::isNull(
    29.                                 'campaign.limit'
    30.                             )
    31.                         )
    32.                     )->
    33.                     add(
    34.                         Expression::in(
    35.                             'category.id',
    36.                             $bannerCategoriesIds
    37.                         )
    38.                     )->add(
    39.                         Expression::orBlock(
    40.                             Expression::andBlock(
    41.                                 Expression::notNull(
    42.                                     'profile.id'
    43.                                 ),
    44.                                 Expression::in(
    45.                                     'profile.positions.position.id',
    46.                                     $positionsIds
    47.                                 )
    48.                             ),
    49.                             Expression::isNull(
    50.                                 'profile.positions.position.id',
    51.                                 $positionsIds
    52.                             )
    53.                         )
    54.                     )->
    55.                     getList();
    Выборка баннеров, которые подходят под сложное условие. Легко заметить, что "пути" - это фактически пропертя объекта.
     
  18. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    sherman
    Остается актуальным :)
     
  19. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    +100
     
  20. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Dagdamor
    Не собираюсь участвовать в споре ORM OR NOT ORM

    Для себя я уже давно все решил, и выигрыш от ORM на практике встречал. Вопрос только в конкретной реализации
     
  21. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    [off]
    Я себя чувствую полным ламером, который должен получать 300$...
    [/off]
     
  22. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Kreker
    забыл дописать нолик :)
     
  23. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    в случае с доктриной это дело обстоит очень даже хорошо

    Опять-таки, доктрину использовать очень просто. Сама библиотека большая конечно, это не скрипт на несколько сотен строк, но, товарищи, не забывайте, мы работаем на PHP, исходник которого не претендует на звание самого простого кода, но смею всех уверить: инструмент наш очень даже удобен в использовании.
     
  24. Amian

    Amian Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    Программеры сами пытаются "упрощать" себе жизнь до тех пор пока не получится какой-нибудь очередной компот из фреймворков как в J2EE, где есть куча ORM на любой вкус и цвет, поверх которых лежит Spring framework, "стандартизирующий" эти решения. Здесь есть любители ОООP (over-engeneered OOP) ? :)
     
  25. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    topas
    Такое рассуждение справедливо для тех, кто пишет расширения для PHP...