какой смысл использовать ООП в php без ORM?

Духовность™

Продвинутый новичок
какой смысл использовать ООП в php без ORM?

Собственно, сабж. Переходя на ОО-модель (тут под определением ОО-модель я говорю именно о тех объектах, которые создаются/обновляются на базе данных из СУБД) сталкиваешься с очень нетривиальной задачей, которая опрокидывает в парадокс весь смысл использования ООП - это трудность совместить объекты и реляционные модели. На тривиальных запросах и выборках всё достигается путём использования небольших самописных мапперов, имеющих вид зачатка ORM-системы. Но как только задачи становятся всё более и более сложнее, как только объекты начинают быть вложенными, многоуровневыми, а запросы связанными с помощью JOIN, то тут в буквальном смысле слова наступает полный, безоговорочный, не подлежащий лечению ПИСЕЦ.

Сам я столкнулся с тем, что использование ОО-программирования и реляционной модели вынуждает писать кучу слоёв приложения, которые при "стандартном" подходе с использованием обычного SQL и процедурного программирования сокращали бы в сотни раз строки кода, время, затраченное на разработку, но приводили бы код приложения к более "некрасивому" виду.

Посмотрел я доки той же доктрины и офигел только от самой документации, а что там внутри и представить сложно, гыгы.

Так вот, я теперь считаю, что использование ООП (в PHP) без ORM, это по сути дело тупиковое и в некоторой степени гиблое. Т.е. PHP в основном взаимодействует с реляционной базой, откуда и растут все сложности. Использование ООП в JavaScript, например, мне куда более удается - там нет необходимости писать объекты в хранилище и использовать SQL как метод получения данных, я оперирую объектами в памяти.

Я прав или нет?
 

Духовность™

Продвинутый новичок
Не путай ПХП и тебя ))
Я имею в виду сложность совмещать реляционную модель и объектно-ориентированную. Ничего против реляционной базы или ООП я не имею. Я говорю именно о методе проектирования с помощью этих двух совершенно разных сущностей.
 

atv

Новичок
Но как только задачи становятся всё более и более сложнее
Попробуй привести конкретные проблемы, может твоё понимание проблемы ошибочно, а соответственно и дальнейшие выводы.
 

Alexandre

PHPПенсионер
Так вот, я теперь считаю, что использование ООП (в PHP) без ORM, это по сути дело тупиковое и в некоторой степени гиблое.
100% не согласен
- использую ООП
- использую сложную логику БД - любой ОРМ сдохнет

просто надо творчески подходить к ООП

-~{}~ 10.03.09 15:11:

Я имею в виду сложность совмещать реляционную модель и объектно-ориентированную
не надо их тупо совмещать: побольше творчества друг мой и к тебе потянутся ученики!
 

HraKK

Мудак
Команда форума
Даааа. я обещал Апокалипсу с пивом почитать пару тем на серче но думаю и тут =)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Я имею в виду сложность совмещать реляционную модель и объектно-ориентированную
Ну так это твои необходимости совмещать разные модели. Язык то в этом не виноват.
 

Духовность™

Продвинутый новичок
Язык то в этом не виноват
да не обвиняю я язык! я просто констатирую сложность совместного использования реляционной модели и ООП. А сложность эта есть - не даром все эти Докрины и Propel-ы появились. Поэтому мне и интересно, как разработчики справляются с этими задачами.

А PHP я упомянул потому, что 90% работы PHP связано с потребностями изменять реляционные данные и манипулировать ими.
 

Krishna

Продался Java
По этому вопросу читать надо вот эту книжку:

http://www.ozon.ru/context/detail/id/1616782/

Несмотря на название, основная часть там посвящена проблемам ORM.

Доктрина, кстати не так уж и сложна в использовании, как кажется по первому взгляду на её документацию. Скорее не самая лучшая документация, примеров внятных маловато. С другой стороны не видел как дела обстоят у конкурентов - может и того хуже.

В общем, ничего особо страшного там нет, если конечно в сам код не лезть. Но лезть туда редко возникает необходимость.
 

fixxxer

К.О.
Партнер клуба
Krishna
Не издевайся над человеком, эту книгу, если ты не гуру, полгода вдумчиво изучать :) Ему бы сначала основные проблемы хотя бы в википедии почитать =)
 

Krishna

Продался Java
Гы, стал тыкать по своей ссылке в страницы содержания и обнаружил что на озоне глюк с формированием УРЛ )

-~{}~ 10.03.09 17:53:

fixxxer
Ну да, с первого захода и одним залпом не осилишь, я сам пока целиком не зарюхал её, да и не предназначена она для этого - это частично справочник, обращаться можно к разным частям по ходу дела. Просто я решил привести, раз уж речь пошла о литературе. К теме она относится значительно больше, чем приведенные ссылки.

А по сабжу - я считаю, что если архитектура подразумевает работу с объектами модели, которые соответствуют записям в таблицах БД, (то есть, фактически напрашивается Active Record паттерн), то причин не использовать ОРМ нет, оно для этого и сделано и решает именно эту проблему. Причем, та же Доктрина располагает надстройкой над SQL и фактически можно писать те же запросы к базе, только в результатах получать готовые объекты.

До сих пор не являюсь экспертом в области, к сожалению, так что всё выше сказанное исключительно ИМХО :)
 

Lightning

Трудоголик
Сам я столкнулся с тем, что использование ОО-программирования и реляционной модели вынуждает писать кучу слоёв приложения, которые при "стандартном" подходе с использованием обычного SQL и процедурного программирования сокращали бы в сотни раз строки кода, время, затраченное на разработку, но приводили бы код приложения к более "некрасивому" виду.
За счет чего у тебя получается много кода? У тебя много кода и при этом нет дублирования?
 

fixxxer

К.О.
Партнер клуба
Krishna

Есть причины как использовать (упрощение и ускорение написания кода, отсутствие необходимости влазить ручками, прикольные возможности типа рельсовских миграций), как и не использовать (необходимость тонкого тюнинга всех запросов, упрощение работы в связке программер-dba). В ентерпрайз-приложениях, соответственно, нет ни одной причины не использовать, в хайлоад вебе - использование сводится к ручному оверрайду практически каждого запроса и таким образом вся польза сводится на нет (проще написать отдельные классы моделей с методами, оперирующими напрямую sql-ем). Ну и в любом случае проблема impedance mismatch никуда не исчезает, другое дело что масштаб бедствий зависит от типа приложения очень сильно.

А вообще будущее за объектными хранилищами. ;) Вот например гугловский bigtable с его ограничениями намного лучше ложится на ORM, и там до распределенного объектного хранилища вобщем то один шаг.
 

Lightning

Трудоголик
В ентерпрайз-приложениях, соответственно, нет ни одной причины не использовать, в хайлоад вебе - использование сводится к ручному оверрайду практически каждого запроса и таким образом вся польза сводится на нет (проще написать отдельные классы моделей с методами, оперирующими напрямую sql-ем).
+1, полностью согласен.
Если вы пишете внутренний корпоративный портал какой-нибудь транснациональной компании, то ORM себя оправдывает. А в web-приложениях можно (и имхо даже лучше) обойтись без него, и не так уж это сложно.
 

atv

Новичок
А в web-приложениях можно (и имхо даже лучше) обойтись без него, и не так уж это сложно.
А зачем отказывать себе в удовольствии на insert/update/delete запросах? Там ОРМ никак не мешает.

Для селектов, если они связаны с отображением информации, то да, возможности ОРМ с одной стороны чрезмерны, с другой - ограничены по тюнингу.

Ну так не проблема для отображения информации использовать обычные запросы. Причём, такие запросы, как правило, к модели не относятся, так как представляют собой различные срезы информации, специфичные для конкретной страницы.
 

fixxxer

К.О.
Партнер клуба
Update тоже далеко не всегда ;) например в mysql бывает полезна оптимизация вида update ... set .... , field=field

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

ну и вообще, вот щас у меня в каждой модельке пробито const QUERY_SELECT_.. QUERY_UPDATE.... etc, вот вижу тормозной запрос и сразу знаю куда смотреть и где он генерится. а с ормом тут поди разбери откуда ноги выросли.

мне тут в плане повышения скорости разработки больше нравится идея генерации шаблонов моделей с типовым кодом =) тут вот в одном проекте прямо напрашивается, надо будет попробовать
 
Сверху