Все вы наверное знаете, что Doctrine была написана под впечатлением от Hibernate. Особенно разработчикам понравился HQL, который стал прототипом для DQL – объектного языка запросов. Но из-за многих ограничений в РНР, ОРМ получилась с костылями. Так, например, нарушался принцип инкапсуляции, ведь все свойства объектов всегда получаются публичными, но теперь, когда в РНР5.3 рефлексия стала более полноценной этого можно избежать.
Более того, теперь свойства можно объявить как свойства класса, а не через конструкцию-костыль hasColumn, а при помощи рефлексии напрямую вставлять значение из БД в нужное свойство. Это улучшит продуктивность тех программистов, что используют IDE с автодополнениями и анализаторами ошибок.
Остается еще один крупный костыль – невозможность определить полноценный конструктор для объектов, так как Doctrine конструкторы приватизировала и использует их для своих нужд. Нормальной же перегрузки в РНР нет, так как язык не строго типизирован и как результат – увидеть нормальные конструкторы нам пока что не суждено (хотя ходят слухи, что в РНР6 эта вкусность появится на уровне «можно включить»).
Так что остается ждать, когда архитектура Doctrine измениться ко всем вкусностям и надеяться что
это будет скоро…
Ах, прям такой джавовской-джавовской она стала =)
Особенно прикольно, что вместо hasColumn они начали использовать аннотации, не говоря уже о переработанном создателе запросов.