семейство паттернов ORM - must die

Вы используете шаблонизаторы(any ORM, Twig, Smarty e.t.c.) в приложениях?

  • it's alive

    Голосов: 9 50,0%
  • must die

    Голосов: 4 22,2%
  • ЭОС

    Голосов: 5 27,8%

  • Всего проголосовало
    18

accido

Новичок
Проблема: высокоуровневая прослойка над ДБ мешает:
а) использовать язык запросов на полную мощность;
б) использовать драйвер БД в ЯП на полную мощность;
в) мешает переходить на различные БД( типа sql => noSql );
г) ORM(строка-обьект) противоречит сущности ООП, так как создает левый функционал для работы с БД, в то время как,
следуя ООП нужно представить сами таблицы БД классами, для того чтобы отобразить сущность БД в предметную область приложения. Тогда в следствии этого тождественного отображения мы можем работать с этими классами как с БД. Эти классы тоже являются моделями, потому что относятся к БД. Хотя работу самой БД мы не можем увидеть, но она реально существует, подобный пример - это электричество. То есть следуя ООП следует описать БД тождественным отображением классов.
Поэтому был придуман новый паттерн( по крайней мере пока не видел похожего ) для взаимодействия с БД
в приложении. За основу был положен паттерн Repository, но с отличиями:
доступ в репозиторий осуществляется не напрямую, а через контроллер операции. Репозитории - это обычные модели, которые отображают БД в предметную область приложения. Репозитории работают через драйвер-модель, который отображает драйвер БД в рабочую область, это тоже следует из принципов ООП.
Пример этого можно увидеть тут https://bitbucket.org/accidos/accido-fw. Реализовано подключение драйвера mysqli через его рабочий класс goDB.
П.С. В доктрине 2 появился паттерн репозиторий, но так как все остальное по-прежнему осталось - то это не совсем то. Просто один маленький шаг для доктрины ...
П.П.С. Возможно перенесу эти концепции на симфони 2, чтобы использовать ее без доктрины и твига( в сущности и то, и то просто ШАБЛОНИЗАТОРЫ данных). Нужно решить реально нужны ли роутеры, хелперы и прочие вспомогательные конструкции. Можно также использовать зенд 2. И там, и там есть готовые менеджеры ивентов. Рассматривается еще куча ФВ типа коханы, фуэла, yii, но все таки больше смотрю на симфони 2.
 

Gas

может по одной?
Толсто, конечно. ORM и Twig всё под одну гребёнку.

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

Репозитории - это обычные модели, которые отображают БД в предметную область приложения.
Поздравляю, это и есть ORM.
 

Absinthe

жожо
Посмотри на Doctrine.
Она не мешает, а помогает в вышеназванных задачах.
 

fixxxer

К.О.
Партнер клуба
Какой-то бессвязный поток сознания. Какое вообще отношение template engines имеют к ORM?
 

accido

Новичок
Толсто, конечно. ORM и Twig всё под одну гребёнку.
Примеры использования своего кода где, не совсем понятно об чём конкретно речь.
https://bitbucket.org/accidos/accido-fw пример с goDB
Поздравляю, это и есть ORM.
Ну в целом да, только имелось ввиду ORM, где используются отображения обьект-строка, а не обьект-таблица. Типа доктрины, пропела, икспдо и прочее... Где используется эти ацкие шаблоны : AR, UoW, IM, IQ, DM. Тут же используется репозиторий как минимум действий. Поправил свой первый пост.
Посмотри на Doctrine.
Она не мешает, а помогает в вышеназванных задачах.
В Доктрине 2 репы - это скорее костыли, выглядят как костыли, и мне абсолютно один хрен как писать запросы на DQL или на SQL. Так что в чем надобность доктрины? Сделайте нормальные нативные репы и не парьтесь. Тем более что часто приходится лезть в код орм, типа доктрины, особенно при профилировании. Что легче написать репу с ктрл-ц и ктрл-в или копаться в логике орм?
 

accido

Новичок
Сори не смержил с локальной версией. Это из какого-то рабочего проекта код. :)
Какое вообще отношение template engines имеют к ORM?
Пример:
$tmpl->access('qwery', $qwery);
$tmpl->fetch(); // отображение в реальные данные

$car->set('engine', $engine);
$car->save(); // отображение в реальные данные
 

Adelf

Administrator
Команда форума
Еще один думает, что он умнее всех...
"Мартин Фаулер: Шаблоны Корпоративных Приложений" в книге в самом начале подробно рассматриваются плюсы и минусы подходов Обьект-таблица и Обьект-строка, выражаясь твоими словами. Там еще и процедурный подход рассматривается. Четко обьясняется где и когда лучше их применять.

З.Ы. Проекты, у которых readme на русском всерьез не принимаю, и даже в сорцы не смотрю.
 

Gas

может по одной?
не увидел там примеров использования
вот пример использования AR на примере Laravel 4
http://four.laravel.com/docs/eloquent#basic-usage
вот DataMapper доктриновский
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/getting-started.html

а как использовать твой код, чем он проще,лучше и какие проблемы решает, которые не могут другие решения?

слова словами, а вот примеры хотелось бы увидеть.

$car->set('engine', $engine);
$car->save(); // отображение в реальные данные
чем это отличается от AR, реализованоного в laravel, yii ?
 

accido

Новичок
$car->set('engine', $engine);
$car->save(); // отображение в реальные данные

чем это отличается от AR, реализованоного в laravel, yii ?
Это не пример кода, это относится к другому вопросу.
Ладно я понял нужен нормальный пример и для особо прагматичных ридми на английском, потому что русский - это не язык, а так набор звуков.
 

Gas

может по одной?
Ладно я понял нужен нормальный пример и для особо прагматичных ридми на английском, потому что русский - это не язык, а так набор звуков.
А как иначе, для того чтобы не голословно звучало - "все дураки, а я Дартаньян", нужно показать и убедить, на простых примерах, что у других плохо, а в твоём решении хорошо, там уже сообщество будет оценивать и вопросы задавать.
Иначе получится как здесь http://habrahabr.ru/post/183374/, правда там чувак до этого доказал что он не глупый мен и хотя бы не стоит сразу отбрасывать варианта его правоты.
 

Фанат

oncle terrible
Команда форума
На самом деле тебе нужно четко вести свою мысль и не отвлекаться на всякие левые аналогии. И, разумеется, не вестись очевидный троллинг. Который, в свою очередь, вызван нечеткостью мысли. Ну, и особым складом здешних завсегдатаев, чего уж там.

А так-то, под заголовок и свежая цитата есть
я понял, что эта задача — она просто нормальным образом не решаема по следующим причинам. Причина номер один заключается в том, что есть фундаментальный, так называемый impedance mismatch между базами данных и объектной разработкой. И ежели мы делаем что-то, что работает плохо с базами данных, это хуже, чем если мы сделаем что-то, что будет не очень хорошо объектно-ориентировано или не очень красиво просто потому, что все «косяки», скорей всего, мы получим на стороне в базе данных — это вот для проекта более рискованно. Поэтому базу данных нужно использовать максимально эффективно. И с ней нужно «разговаривать» на языке SQL. Чтобы с ней разговаривать на языке SQL, необходимо иметь возможность, в том числе, на этот SQL влиять. А большая часть ORM пишется так, что, в общем-то, всё делается за тебя.
Под которой лично я подпишусь обеими руками.
 

Gas

может по одной?
Фанат
мне тоже понравилась эта фраза Алексея Рыбака, и я с ней согласен.
но всё таки для простых бложиков, где 99% это crud операции + работа со связанными моделями, куда меньше нужно думать о максимальном использовании всех плюшек используемого хранилища.
 

fixxxer

К.О.
Партнер клуба
Есть альтернативная, достаточно простая тема, когда ты говоришь: «Окей, окей, есть impedance mismatch, я от него никуда не уйду. Я должен проектировать хорошо базы данных, я буду с ними разговаривать на языке SQL, я замаплю всё и сделаю интерфейс, дальше всё. Вот где-то посередине у меня будет какой-то маппинг, я потрачу на него какое-то время».
Это тоже orm. :) Просто неавтоматизированный.
 
  • Like
Реакции: WMix

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Блин, ЭОС

PS: никакой теории программирования в треде не детектед =(
 
Сверху