Критика работы с БД в SimplePHPframework от AmdY

Фанат

oncle terrible
Команда форума
И всё-таки, если уйти от перехода на личности и попробовать совместить позиции.

Я считаю, что работа с БД в этом фреймворке организована неправильно
Претензий у меня основных две.

Первая - чисто инструментального плана. Вполне исправима. Уровень работы с SQL не доделан, не имеет необходимого функционала. В частности оттого, что перенимает все родовые недостатки PDO.
Авторы PDO наивно полагают, что сделали удобный класс для работы с БД. Хотя на самом деле никакого удобства в нём нет, как нет и множества необходимых вещей.
Пример такого необходимого функционала - плейсхолдер для оператора SET. при отсутствии его код приложения превращается в адский треш с кишками SQL-я.

Исправлять эти недостатки предлагается уровнем выше, в классе-прототипе. Это я считаю в корне неправильным. Я считаю, что каждый уровень должен заниматься своим делом. SQL должен заниматься SQL-ем. ОРМ - предоставлять базовые методы для работы с объектами.

Вторая претензия - архитектурная.
Я считаю, что в заявлениях про фреймворк есть непреодолимое противоречие: расширяемость vs. хардкод SQL. Если мы оставляем себе такую возможность - значит, о расширяемости придётся забыть. Надо выбрать что-то одно.

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

getWhere в коде приложения - это фиговый листок. Это ТОТ ЖЕ САМЫЙ НЕРАСШИРЯЕМЫЙ хардкод SQL, который просто засунул голову в песок.
Я - за честность. Если мы пишем в коде SQL - пусть это будет честный SQL.
Если у меня всё равно SQL, то я предпочитаю цельным куском, а не расчленёнку, когда в приложении видны только ноги, а голова скрывается где-то в глубоко в недрах приложения.
 

AmdY

Пью пиво
Команда форума
https://github.com/AmdY/SimplePhpFramework
только он вроде нерабочий, я поймал прикольный глюк при роутинге https://github.com/AmdY/SimplePhpFramework/blob/master/vendor/Frm/Route.php#L32
Если роут с замыканием передавать в index.php, то bindTo прекрасно работает, а если в бандле, до вдруг начинает валиться ошибка. А затем я наткнулся на Laravel и понял что задуманный фреймворк уже негодяи написали до меня, единственное что он построен на статических методах.
 

Фанат

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

флоппик

promotor fidei
Команда форума
Партнер клуба
Да, да. Один ты весь в белом. Мы уже поняли.
 

AmdY

Пью пиво
Команда форума
Фанат
ты перечитай просто бред который генерируешь.
Уровень работы с SQL не доделан, не имеет необходимого функционала.
Чтобы п оддерживать sql на 100% достаточно два набора вызововов - PDO->exec для выполения запроса и цепочка prepare-execute-fetch. Или может в командная строка mysql не поддерживает уровень работы с SQL потому что она не поддерживает хитрые плейсхолдеры?
Пример такого необходимого функционала - плейсхолдер для оператора SET.
Ты в курсе что это не стандартный оператор и поддерживается не всеми базами из списка PDO и решение c Expression builder является распостранённым для решение c DSL, так как отказ от синтаксических конструкций в пользу стандартного набора абстракций лишает преимуществ заточки под DSL. В этом году переводили на DB2 крупный проект, который уже использовал абстракции для баз данных MySQL, ORACLE, MSSQL, так пришлось погемороиться как с совместимостью, так и с оптимизацией, потому что полная абстракция это миф для тех, кто таким никогда не занимался.
getWhere - это стандартный билдер, он не решает задачи SQL, он решает задачу инкрементального построения объекта в разных частях приложения или с ветвлением.

Я считаю, что в заявлениях про фреймворк есть непреодолимое противоречие: расширяемость vs. хардкод SQL. Если мы оставляем себе такую возможность - значит, о расширяемости придётся забыть. Надо выбрать что-то одно.
Я тебе десять раз демонстрировал что решение полностью сохранило мощь SQL и в то же время можно легко расширять с помощью плагинов за счёт имеющихся точек входа. Так что не "vs", а "and"

Автору мешает предвзятость, а остальным - необходимость переступить полуторасекундный порог.
Вот что тебе мешает увидеть что решение решило все твои типо "vs" задачи или так туго с пониманием объектно ориентированного кода?
 

AmdY

Пью пиво
Команда форума
Фанат
смотря где, там где требовалась подержка разных баз, естественно не использовали, а в данной обёртке, конечно, она же тупо mysql. упс, оказывается я функцию для пейджинга вырезал, там SQL_CALC_FOUND_ROWS юзаю. Но одно дело я и моя реализация, но требовать этого от универсального драйвера PDO :)
 

MiksIr

miksir@home:~$
Ну, в общем, да, это была изначально безнадёжная затея.
Автору мешает предвзятость, а остальным - необходимость переступить полуторасекундный порог.
Мне мешает изначальное отсуствие темы обсуждения. Что там так или не так в фреймоврке AmdY по мнению Фаната - абсолютно неинтересно.
А тема SQL vs SQL builder vs ORM поднималась, как и любая другая holy wars много раз, и ничего кроме флуда не принесет, ибо те, кто программирует давно - уже сделали свои выводы, часто на собственных шишках, так что для их изменения нужно что-то больше, чем выражение чьего-то иного мнения.
 

Фанат

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

MiksIr

miksir@home:~$
Гордиться тем, что вынута из архива очередная проблема, которая проблемой не является, тоже абсолютно нечем.
Давай поговорим о проблемах миграции наземных позвоночных Центральной Сибири.
Гм, что, не интеренсно? Ну, гордиться тут абсолютно нечем.
 

fixxxer

К.О.
Партнер клуба
Фанат
SET - это тоже, в каком-то смысле, хардкод SQL, даже IN(1,2,3) - хардкод, не хардкод только чистые плейсхолдеры. ;)
AmdY выбрал решение частных случаев компромиссным способом и с layering violation вместо общего решения красивым способом, мне это тоже не нравится, но, поскольку он сам это прекрасно понимает и сделал осознанно - его право.
 

fixxxer

К.О.
Партнер клуба
Этим можно любой говнокод оправдать. Это я не про тебя, конечно :) но вообще такие статьи вредно читать неподготовленному мозгу, я считаю, тут примерно как с денормализацией в БД - чтобы ее использовать, для начала надо усвоить нормальные формы.
 

С.

Продвинутый новичок
На сколько я понимаю, вся holy discussion началась с поста, в котором AmdY подал этот метод начинающему в качестве good practice. Как бы не совсем красиво, если понимаешь, что...
AmdY выбрал решение частных случаев компромиссным способом и с layering violation вместо общего решения красивым способом, мне это тоже не нравится, но, поскольку он сам это прекрасно понимает и сделал осознанно
Я сам готов идти на компромиссы, если строгий канон грозит большим головняком или оверхедом. Но здесь не совсем тот случай, неоправданно большой люфт между двумя каноничными вариантами, чтобы посоветовать его в качестве образца.
 
  • Like
Реакции: AmdY

MiksIr

miksir@home:~$
На сколько я понимаю, вся holy discussion началась с поста, в котором AmdY подал этот метод начинающему в качестве good practice. Как бы не совсем красиво, если понимаешь, что...

Я сам готов идти на компромиссы, если строгий канон грозит большим головняком или оверхедом. Но здесь не совсем тот случай, неоправданно большой люфт между двумя каноничными вариантами, чтобы посоветовать его в качестве образца.
Нет никаких строгих канонов, равно как универсальных ORM и гибких решений на все случаи жизни. Если AmdY создал для своих задач такую прослойку и ее использует - то его право. Равно как утверждать, что это - гибко и хорошо. Равно как остальным - игнорировать его утверждения. Вообще до тех пор, пока какой-то утверждатор не встанет в ральности за спиной и не начнет постоянно что-то утверждать, каждый волен утверждать что угодно. Верность утверждения проверяется исключительно количеством последователей.
 

fixxxer

К.О.
Партнер клуба
Ну, может я тебя не так понял, но мне показалось, что ты, записывая в недостатки PDO отсутствие sql-генерирующих плейсхолдеров, и, позже говоря о том, что "каждый должен заниматься своим делом", несколько сам себе противоречишь. Лично я-то для себя давно решил, что в жопу PDO-плейсхолдеры :)
 
Сверху