Мои (простые) два цента:
1: есть ORMS и есть ORMS. Некоторые ORMS основаны на Active Record, другие основаны на Data Mapper - это само по себе является важным фактором, но требует понимания, чтобы понять последствия. В целом, мой опыт в PHP заключается в том, что ORMS поддерживают первое, немногие поддерживают второе. ORM на основе Active Record, по-видимому, имеют один из двух эффектов: они либо нормализуют базу данных, либо вызывают множество классов для поддержки взаимодействия объектов.
2: Преимущество ORM уменьшается в прямой зависимости от сложности запроса, который вам нужно выполнить. Когда у вас хорошие приятные отношения - например, Пользователи -> Сообщения, они могут работать очень хорошо. Это (IMO), поэтому большинство ORM / каркасов используют подобные примеры. Однако, когда вам нужно выполнить сложные запросы, объем ORMQL, который вам нужно сгенерировать, сопоставим с длиной строки обычного запроса SQL - но менее производительный из-за того, что граф объектов, запускающий запрос, вызывает, что побеждает точку абстракция. Итак, в двух словах - ORM великолепны для первых 30-50% задач вашей базы данных - но ужасны для последних. Я думаю, что это еще одна причина, почему AR так распространен.
3: зачем прятаться от базы данных? Вы бы использовали язык на стороне сервера для абстрагирования JavaScript?
Лично я смешиваю эти подходы:
- используйте ORM для основ, загружая "пользователей"
- используйте DAO, содержащий несколько предварительно запеченных SQL-запросов (т.е. selectLike, selectWhere).
- расширить DAO, где это необходимо, чтобы добавить более конкретные, но повторно используемые пользовательские запросы
- Обеспечьте простой доступ к базе данных через DAO - то есть $ data = Dao-> запрос (ваша строка sql) для выполнения однократных запросов.
Сказав все это, Doctrine 2 скоро выйдет, что выглядит действительно интересно.