Вот он какой, Doctrine 2 (Приурочено к релизу Doctrine 2.0 alpha 3)

Автор: Nayjest Категория: php

image
Поздравляю, коллеги! 3 дня назад увидела свет треться альфа-версия самого мощного на сегодняшний день ORM-фреймворка для PHP: Doctrine.

И эта новость по большему счету заслуживает внимания потому что в Doctrine 2.0 произошли очень существенные изменения в сравнении с предыдущими версиями. Сразу замечу, что вкусности эти потребуют от нас ни много ни мало — поддержку php 5.3.

Официальный тизер Doctrine 2.0 выглядит так:

  1. <?php
  2. namespace Doctrine\Tests\Models\CMS;
  3. /**
    * @DoctrineEntity(tableName=»cms_articles»)
    */
  4. class CmsArticle
  5. {
  6. /**
    * @DoctrineId
    * @DoctrineColumn(type=»integer»)
    * @DoctrineIdGenerator(«auto»)
    */
  7. public $id;
  8. /**
    * @DoctrineColumn(type=»varchar», length=255)
    */
  9. public $topic;
  10. /**
    * @DoctrineColumn(type=»varchar»)
    */
  11. public $text;
  12. /**
    * @DoctrineManyToOne(targetEntity=»Doctrine\Tests\Models\CMS\CmsUser»,
    joinColumns={«user_id» = »id»})
    */
  13. public $user;
  14. /**
    * @DoctrineOneToMany(targetEntity=»Doctrine\Tests\Models\CMS\CmsComment», mappedBy=»article»)
    */
  15. public $comments;
  16. }

Итак, на что нам здесь следовало бы обратить здесь внимание:

1) Мы задаем мета-данные для меппинга класса с помощью комментариев DocBlock (XML-меппиг и YAML-меппинг никуда не делся)

2) Мы не наследуем наш класс CmsArticle от встроенных класов Doctrine.

3.) Свойства класса не обязаны быть объявлены как public, они могут быть приватными или защищенными. Doctrine не требует от вас наличия getter’od и setter’ов для каждого свойства. Вы полностью свободны в том, как вы будете проектировать ваши классы.

Друзья, по-моему это великолепно!

Смею предположить, что чтение комментариев DocBlock реализовано с помощью Reflection (там есть метод getDocComment).
Довольно интересное применение Reflection.
Кстати, еще более активно и более элегантно(имхо) это используется в Recess php framework. Случайно наткнулся на него и был поражен, увидел там именно то, что хотел делать в собственном велосипеде. Вещь однозначно заслуживает внимания.

Производительность:
Doctrine 2.0 на php5.3 кушает на 31% меньше памяти и выполняется на 17% быстрее, чем Doctrine 1.0 на PHP 5.2.8
(информация из предварительных тестов в блоге разработчиков)

Что нового в Doctrine 2.0 Alpha 3:
Самое существенное с моей точки зрения это функционал для конвертирования схем из Doctrine 1.0 в 2.0.
А также более 60 фиксов, рефакторинг кода, работа над драйверами для меппинга и экспорта, как говорят разработчики, код начинает становиться стабильным.

Чего нам ждать:
11 декабря 2009 будет еще один альфа-релиз, а 8-го января выйдет уже первая бета.

Ссылки:
Здесь живет Doctrine PHP ORM
Вот документация по версии 2.0:
Посты из блога разработчиков с тегом 2.0




50 Комментариев на “Вот он какой, Doctrine 2 (Приурочено к релизу Doctrine 2.0 alpha 3)”

  1. Alex сказал:

    getDocComment в Reflection это зачетная штука. Я вот раньше долго думал, нафига же нужен этот Reflection :)

  2. Zanzibar сказал:

    Привет с Хабра! :)
    Весьма интересный подход они использовали в Doctrine 2.0, надо будет покопаться

  3. Zanzibar сказал:

    Ну, в смысле, я юзал когда-то Doctrine, как-то оно слишком громоздко показалось, а сейчас возможно второй шанс взяться за эту библиотеку.

  4. Roxi сказал:

    Ыыы, ну почему ж php 5.3, мой хостер даже не планирует пока обновляться :(

  5. V.N. сказал:

    О да, Recess php framework доставляет

  6. progg.ru сказал:

    Вот он какой, Doctrine 2 (Приурочено к релизу Doctrine 2.0 alpha 3)…

    Thank you for submitting this cool story – Trackback from progg.ru…

  7. Mr X сказал:

    Синтаксис мета-описания классов модели (меппинга) в DocBlock они могли бы сделать более простым, читаемым и лаконичным.

    Слишком много синтаксического мусора, как по мне, в формате, предлагаемом Doctrine 2.0.

    Кроме того, можно было бы разработать какие-то правила для автоматического осуществления объектно-реляционного меппинга, например если есть public поле у класса, которое именуется примерно так: public $author_id, то можно было бы подтягивать автоматически модеть Author.

    Может посоветуете какую-то хорошую ORM-библиотеку для PHP, где такое есть?

  8. Satta сказал:

    Ухх, если бы вы знали, какая тормозная штука этот Reflection…

  9. Nayjest сказал:

    Mr X, ну в том же Recess framework посмотрите, там все полаконичней как-то, но я особо их ORM не копал, не знаю, какая там производительность, не знаю даже есть ли кеширование, да и возможно — просто сыровато на данный момент. Но поизучать однозначно стоит, если вы ищете какой-то новый framework.

  10. Keel сказал:

    @Satta

    Я проверял – установка значения объекта через ReflectionProperty где-то в три раза медленнее обычного способа ($a->b = «value»). И в полтора-два раза медленнее сеттеров (в PHP 5.3).

    На 100 000 вызовов установки значения свойства класса, получились такие значения:
    0.05102300643920 ($a->b = mt_rand(0,100000))
    0.09682297706604 ($a->setB(mt_rand(0,100000)))
    0.16601204872131 (ReflectionProperty::setValue($a, mt_rand(0,1000000)))

    Пробовал устанавливать и private – те же результаты. Так что в целом вполне приемлемо, учитывая, что это спички по сравнению с другими вызовами в коде.

  11. Vasyak сказал:

    что то не очень внятно

  12. Seva сказал:

    Полезная статейка, спасибо!!

  13. Володя сказал:

    Спасибо за обзор и ссылки! Изучаю с удовольствием!

  14. Blogger сказал:

    Какойто уж сильно громоздкий Doctrine 2, не все понятно что к чему…

  15. ОченьЗлой сказал:

    Да ладно, простой код..что тут громоздкого Вы увидели? О_о .. я проверил, нормально вполне..

  16. Русалка сказал:

    Давно мой суженый с этой системой работает, все расхваливает мне, расхваливает, а я никак не могла понять, о чем он :) Теперь с вашей помощью разобралась. Спасибо! :)

  17. Grindex сказал:

    Спасибо! пост понравился, приступаю к изучению

  18. loveread сказал:

    Прикольная статья получилась, а главное просто и понятно написана :)
    Большое спасибо, побольше бы таких статей.

  19. Леди сказал:

    Как же все это сложно. Слава богу у меня есть знакомый программист.

  20. macos сказал:

    Леди, поддерживаю полностью))

  21. rezident сказал:

    Мне тоже показалась тормозной, может ест какие секреты как настроить еще?

  22. Breket сказал:

    Понятно и доходчиво, спасибо!

  23. sitystroyinfo сказал:

    фантастика!…

  24. Stiks сказал:

    Нормальный же…

  25. photoshoponline сказал:

    до пхп 5.3 далеко

  26. Петр Иванович сказал:

    Пора МОзг архивировать

  27. рэппер сказал:

    Спасибо было очень полезно почитать, и браться за работу

  28. Gestein сказал:

    Наконец то что искал! Буду разбираться! Спасибо автор!

  29. кулинарный рецепт сказал:

    Полезная статья, спасибо за обзор и ссылки!

  30. Dan сказал:

    Отличная статься!
    п.с. как же много спамных комментов)) я больше еще нигде не видел))

  31. Рабочий сказал:

    Это вообще отличная штука! Сам ей уже давно пользуюсь, чуть ли не с самого её релиза.

  32. Андрей сказал:

    Так, как всегда мнения разделились. Пока, как говорится, сам не попробуешь.. :)

    Автору респект за обзор. Затестим сейчас бета версию

  33. Ironadmin сказал:

    Лично я остался даволен. С Doctrine приятно работать :)

  34. Яковлевна сказал:

    Это очень хорошая новость для тех, кто в этом разбирается, всем остальным же остаётся только писать такие вот комменты) Вроде и мимо проходить как-то неудобно, а по теме и сказать нечего.

  35. Oleg сказал:

    Мне тоже показалась тормозной, может ест какие секреты как настроить еще?

  36. Владимир сказал:

    Аа – класс!) Буду изучать, мне не помешает!) Спасибо!

  37. Book сказал:

    тёмный лес)

  38. Aleksandra сказал:

    Book
    да всё же просто)

  39. Kirill сказал:

    всё же тёмный лес)

  40. Иван сказал:

    Уже использую релиз доктрины 2.0
    Понравилась работа с массовыми выборками createQuery()->iterate, когда открывается отдельный коннект к базе и постепенно отдается информация.
    Не понравилась работа из связями таблиц. Особенно когда нужно внести изменения в структуру таблиц.

  41. inmetal сказал:

    Ironadmin
    согласен, очень удобно.

  42. Vadim сказал:

    старая новость)

  43. Владислав сказал:

    Хороший обзор, спасибо!

  44. Руслан сказал:

    Спасибо за инфу, полезно!

  45. Johny сказал:

    Блин, надо хостера пинать!

  46. Wariato сказал:

    Привет. нашел http://www.nayjest.ru в топе Google. Классно это у вас получается.

  47. Montana23 сказал:

    если я начну с вами спорить на эту тему вы меня наверное забаните на http://www.nayjest.ru ?

  48. мобилиный телефон сказал:

    Я должен сказать, это действительно очень хороший роман, хотя, я только что достигла примерно на полпути вниз по дороге читая роман, но был один, который всегда держал меня интересует. Я просто не могу удержаться, чтобы получить сделано с книгой.

  49. мобилиный телефон сказал:

    Мне нравится ваша точка view.Could вы объяснить подробнее об этом предмете? Я взволнован, чтобы найти ваш сайт, и ждет более обновлений с you.By способ сохранить хорошую работу

  50. Научный сказал:

    Как-то давно разбирался в этом фреймворке. Функционал конечно хороший, но на ту пору сырой был проект – достаточно много багов и недоработок было.

Оставить комментарий