Вот он какой, 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




28 Комментариев на “Вот он какой, 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 сказал:

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

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