Подскажите задания для новичков

Фанат

oncle terrible
Команда форума
не вижу смысла это обсуждать
Ок, я лох, и не посмотрел в тестах грандиозную разницу между getWhere и getExpr.

По остальным пунктам, как я и думал, возражений не нашлось :)

На самом деле, проблема в том, что ты пытаешься из драйвера SQL сделать некий универсальный сервис доступа к данным. И сервер на лету подменять, и к мемкешу обращаться.
При этом правильно было бы не смешивать эти сущности. сделать дравйвер БД, а после него - полноценный ОРМ, который бы и абстрагировал, как ты хочешь, работу с данными. И был бы расширяемым, кошерным кавыйным и няшным.

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

AmdY

Пью пиво
Команда форума
делать дравйвер БД, а после него - полноценный ОРМ, который бы и абстрагировал, как ты хочешь, работу с данными
Я не верю в полноценный ОРМ и не пытаюсь избавить от SQL, я просто делаю расширябельную обёртку, конкретна эта для базы данных. Согласно принципу YAGNI не стремлюсь навернуть ненужной абстрации, а оставляю лишь реальный минимум со входными точками, который затем действительно можно дополнить, а может и не придётся дополнять.

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

Фанат

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

Redjik

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

scb

Новичок
Да хватит уже, для меня на сайте вы ребята в топе авторетитов, к которым я всегда прислушиваюсь...
И что теперь разорваться? и вроде один дело говорит, и другой... и хз, где правда...
Они об одном и том же, по большому счету))) только один фанатичнее второго))
 

fixxxer

К.О.
Партнер клуба
AmdY
fixxxer
Раз уж совсем оффтоп, то вроде как "производительность программиста" ночью хуже, чем днем, ну сбивать биоритмы и т. д., и т. п. нельзя иначе только хуже, вроде) сначала так кажется что вот успею успею все, не буду спать ночами, а в итоге себе же хуже, не?
Я типичная сова. AmdY еще везет, что после 12-и может работать, я часов до 14 не могу. А ночью - самое то. Хотя есть другой вариант - проснуться часа в 4-5 утра =)
Пытался себя приучить к графику - бесполезно, похоже, у меня биоритмы вообще на сутки не завязаны: если пустить все на самотек, получается самая комфортная ситуация, когда в неделе 6 дней =). А вообще это все индивидуально, конечно.
 

Ragazzo

TDD interested
флоппик
это кстати очень хорошо, много преимуществ. :)
fixxxer та же фигня, только у нас все работают с 9-10 до 19-20 вечера и иногда приходится все таки заставлять себя спать по 4-5 часов чтобы в ритм войти)) на мой взгляд круто работать где-то с 4-5 вечера и до 1-2 ночи :) самое продуктивное время) ну и утро где-то с 8-30 до 11-30 :)
 

Фанат

oncle terrible
Команда форума
Фанат
Решение с mysql функциями делается введением объекта Expression и одного ифа, выглядит так
И всё-таки, твоя проблема в том, что ты скрестил драйвер mysql с классом-прототипом.
Отсюда и все эти противоречия.
Если бы класс был отдельно, со всеми своими орм побрякушками, типа insert() и delete(), наследуемыми другими классами - у меня не было бы ни одной претензии.
Просто это совсем разные сущности на самом деле.
 

AmdY

Пью пиво
Команда форума
Фанат
У НАС проблем нет, это решение в том или ином виде используется в большинстве фреймворков, моё отличается лишь отсутствием полноценного QueryBuilde-а, точно так же у меня для полноценного фреймворка есть поверх этого драйвера обёртка Db\Table, которая, как ты правильно заметил, берёт на себя ORM фишки и декорирует методы драйвера.
Но этот обвес не ложился в рамки концепиию simple данной реализации, поэтому я оставил самодостаточный минимум функционала с входными точками, который можно обвешивать по своему желанию и под требования проекта. Его можно использовать как есть, можно расширять, можно вообще не использовать insert-delete, а юзать прямые sql запросы через драйвер pdo.
А вот $posts = dbget(3,"SELECT * FROM blog WHERE user=%d",$_GET['user']); - это путь внекуда, нерасширябельная абстракция, с единой точкой входа и расширения, разве что через парсер sql в этой точке. Кстати, у меня на работе такое решение с парсером делали коллеги по java цеху чтобы улучшить маштабирование без переписывания всего слоя БД, вот они матом крыли подобный минимализм.
 

Фанат

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

AmdY

Пью пиво
Команда форума
Фанат
Ты сваливаешься с технической линии переходя на мои якобы амбиции, в то время как я грамотно прикрылся чужим опытом
У НАС проблем нет, это решение в том или ином виде используется в большинстве фреймворков
>>dbget сюда зачем-то приплёл.
Его приплёл не я а ты сам комментирую моё решение
Это хороший пример того, что я называю нубоинжинирингом.
(Ещё пример такого нубоинжиниринга - предыдущая версия функции dbget, в которой не было параметра mode, а которая сама пыталась определять тип возвращаемого результата по формату полученных из БД данных. И тут я налетел на случай, когда я ждал двумерный массив, а в базе была только одна строка - и функция вернула мне одномерный.)
Заметь, мой вариант спокойно расширяется без изменения интерфейса доступа.

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

Фанат

oncle terrible
Команда форума
во-первых, не надо сюда притягивать эту говнофункцию. Я нигде не говорил, что предлагаю её, как альтернативу. Это всего лишь способ улучшить чудовищную классическую похапешную лапшу. Доступный всей той деревенщине, у которой поджилки трясутся при одном лишь упоминании ООП.
Если ты научишься впаривать ей свой класс - я первый удалю все упоминания об этой функции.
К теме же разговора она не имеет никакого отношения, и поэтому цепляния к ней я расцениваю как то самое "сваливание с технической линии".

Во-вторых, ты не понимаешь, по-видимому, суть моих претензий.
Я не говорю, что расширямеость - это плохо. Я просто объясняю, что под видом расширения ты валишь всё в одну кучу. И указываю на взаимоисключающие параграфы в твоих доводах, которые являются следствем расхождения благих намерений с реальной жизнью.

В-третьих, ты не понимаешь суть моей позиции.
Я нигде не предлагал фигачить "голый SQL" в коде приложения. Ну нигде, вообще я такого не говорил.
Я всего лишь говорил о том, что драйвер SQL должен только уметь выполнять запросы. Делать это хорошо. И не пытаться изображать из себя abstract data access layer. Этот уровень надо строить выше. В другом классе. Используя sql как один из драйверов. И вот уже его - хоть обрасширяйся. Но так уже, чтобы из него конкретный диалект SQL не торчал.
А у тебя он торчит во все стороны, прикрытый фиговым листком getWhere.

просто это разные задачи - "генерить сырой SQL" и "расширяемость". при этом ни одна из них не является чем-то плохим или постыдным.
 

AmdY

Пью пиво
Команда форума
Фанат
Вернись на первую страницу и перечитай.
Мы обсуждали задание новичку. Я предлажил задание - обёртка над PDO с дальннейшим её развитием и рефакторингом.
вот, кстати, хороший пример, пускай сделает обёртку над PDO чтобы делать $db->fetchOne($sql, $params), $db->fetchAll($sql, $params), $db->insert($table, $dataArray), $db->delete($table, $where, $params)
затем рефакторинг, например чтобы прикрутил логер.
Ты возмутился
кономя ДВА слова, мы имеем КУЧУ проблем.
Что делать с INSERT IGNORE? А REPLACE куда девать? Что делать со вставкой NOW()? INET_ATON()? Что делать с делитом по джойну? Писать многоэтажные $options и вместо простого и читабельного практически на натуральном английском запроса иметь несколько строк винегрета из SQL и PHP?
На что я тебе привёл пример того как обходится это "страшное" ограничение.
Вот видишь, какое прекрасное задание, как раз есть что дорабатывать. Решение с mysql функциями делается введением объекта Expression и одного ифа, выглядит так
https://github.com/AmdY/SimplePhpFramework/blob/master/vendor/Frm/Db.php#L147
https://github.com/AmdY/SimplePhpFramework/blob/master/test/vendor/Frm/DBTest.php#L76
Можно и вовсе хреначить SQL https://github.com/AmdY/SimplePhpFramework/blob/master/test/vendor/Frm/DBTest.php#L23
ВРоде ответ был дан, но ты неглядя продолжил наезд хотоя ответ уже был дан.
Жаль, я не привёл этот пример сразу:
PHP:
$sql = "INSERT INTO table SET ts=unix_timestamp(),ip=inet_aton(?s),?u)";
$db->run($sql,$ip,$data);
На что мной был дан готовый код который хорошо просматривался ещё в примерах тестов
$sql = "INSERT INTO table SET ts=unix_timestamp(),ip=inet_aton(?s),?u)";
$db->run($sql,$ip,$data);
//
$data = ['ts' => $db->getExpr('unix_timestamp()')];
if ($ip) { // вот собственно зачем нужны эти массивы и магический класс Db\Where, они позволяют реализовать билдер.
$data['ip'] = $db->getExpr('inet_aton(?)', ['127.0.0.1']);
}
$db->insert('test', $data);
Сейчас ты уже не к удобству, а к идеалогической неверности. А всё начиналось с обучения новичка. Но вместо того чтобы его учить сразу писать объектный код, ты предлагаешь впаривать готовую функцию? Я чего-то не понимаю.
Если ты научишься впаривать ей свой класс - я первый удалю все упоминания об этой функции.
Я всего лишь говорил о том, что драйвер SQL должен только уметь выполнять запросы.
Ты не понимаешь моего отношения к коду - никто, никому, ничего не должен, нужно лишь делать удобно и расширяемо. На остальное мне плевать, я перерос возраст, когда молился на идеалогическую грамотность и паттернизацию любой ценой.
 

Redjik

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

scb

Новичок
Ну значит вы не проскочили, а эволюционировали.
 

Фанат

oncle terrible
Команда форума
ничего ты не перерос :)
а как раз наоборот - в самом пионерском возрасте "не признаю никаких правил, лишь бы мне было удобно".
Выглядит смешно, особенно в диалогах вида
- дважды два должно быть четыре
- нет никаких правил! Если мне удобно, то будет пять!
это как раз очень возрастное :)
понимаю, очень приятно выглядеть этаким оригиналом, борцом с рутиной и догмами.

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

Но спасибо что объяснил. С таким отношением, действительно, спорить бесполезно.
 

AmdY

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

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