середу, березня 25, 2009

PHP ORM Doctrine и почему ее надо использовать.

DoctrineСклоняетесь или интересуетесь ORM?
Знаете PHP, но не работали с ORM?
Слышали про Doctrine, но толком не вкурите в чем соль?
Тогда Вам сюда. Здесь я постараюсь описать свое впечатление от работы с системой, а вы возьмете на заметку. Ведь в конечном итоге Вам решать работать с ней или нет.

Что такое ORM?
Ну вообще ORM простыми словами, это система, которая позволяет абстрагироваться от БД и работать на уровне обьектов. В чем соль?
Вся соль в том, что я могу сказать обьекту:
$обьект->сохранись();
И он сохранился, а sql я не пишу. Жииииррррр.....

Итак:
Я переключился на Doctrine после двугодичной разработки самописных систем. Что такое самописная система надеюсь все знают, это когда все написано от руки и это все модифицируется и со временем выростает в громадную кучу кода. С которой уже не хочется работать.
Doctrine
Так вот после этих двух лет, я открыл для себя новый горизонт. Первое, что мне понравилось в Доктрине, это:
  1. То, что написание sql запросов в разы улучшается, с точки зрения подхода! Именно с точки зрения подхода, а это важно. Важно, потому что это огромная экономия времени на написании и на дебаге sql запросов. Вообще Doctrine абстрагируется от базы данных и работать с ней, становится одним удовольствием.
  2. Doctrine позволяет подходить к разработке посредством сущности - СУПЕР КЛАССНО. Объявив один раз сущность "Новость", я могу вертеть ей как мне захочется, это также громадная экономия времени. Я могу связать эту сущность с сущностью "Категория" и с легкостью выбирать все новости по категории.
  3. Doctrine использует innoDB таблицы MySQL сервера. А innoDB в свою очередь тянет за собой весь свой потенциал. Особенно мне нравятся каскадные удаления. А раньше я писал проверки и удалял руками из одной таблицы, потом из другой.
  4. Я в восторге от подхода Доктрины к формированию БД и обьектов посредством фикстур и схем. Описав их один раз, я могу с легкостью разворачивать проект где мне угодно и не заботиться о дампах баз данных.
  5. Мне очень нравится плагин к Доктрине Nested Set (вложенное множество), который я сразу же начал использовать в новом проекте.
И еще мне много чего в ней нравится, но главное это наверное одно: "Простота и быстрота решения поставленных задач".

Есть в ней конечно и минусы и иногда даже нужно лезть в код и править саму Doctrine. Есть некоторые недоразумения в объявлении yaml схем, также в составных ключах и использование праймери ключа в таблицах. Также минус для новичка, это довольно скудная и сложная для чтения документация API. Но эти минусы можно виртуозно обходить используя другие подходы к решению задач.
Doctrine предоставляет свой репозиторий, откуда можно высосать последнюю версию. Еще у нее есть открытый для пользователя Trac. Сама она написана тоже достаточно не сложно. Так что вам и карты в руки.

Использование Doctrine вместе с Symfony или CodeIgniter позволяет юзать классный OOP PHP5, что есть очень хорошим опытом и развитием для программиста. Но я пошел дальше, я прикрутил SimpleTest и стал использовать методику TDD.

Как итог могу подвести следующее: PHP ORM Doctrine включает в себя немалый потенциал, есть конечно и минусы и плюсы, но в целом мне нравится их подход, если первый проект отрекомендует себя довольно неплохо, вряд ли я откажусь от Доктрины.

Класс посвященный управлению Nested Set в Symfony с использованием Doctrine.

4 коментарі:

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

    ВідповістиВидалити
  2. доктрин не поможет . если изначально не научился работать с SQL и правильно строить запросы.

    ВідповістиВидалити
  3. Доктрина вещь вроде неплохая. Но как-то не впечатляют восторги от человека, который при написании "самописных" систем не научился использовать внешние ключи.

    ВідповістиВидалити
  4. Очень бедная статья, одни эмоции, никаких циферек, сравнения производительности и т.д.
    ИМХО статья просто засоряет результаты поиска

    ВідповістиВидалити

Що таке база данних?

База данних — це спеціальна система зберігання, організації та пошуку інформації. Вона містить дані у вигляді таблиць, записів та інших стру...