metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-06-29 06:21 pm

Обучение частным случаям частных реализаций

http://d4s.livejournal.com/210142.html
Вопрос про обучение SQL. Не про продажу человеко-часов конкретному кастомеру с конкретной СУБД.
В комментариях ад содома и гоморры, с приведением каких-то дичайших конструкций из частных реализаций.

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

[identity profile] dr-hyder.livejournal.com 2012-06-29 04:48 pm (UTC)(link)
А смысл делать остальное на ORM? Оно нужно для type-safe mapping и всё, запросы пишутся либо на SQL, либо на каком нибудь HQL, если это hybernate.

[identity profile] w00dy.livejournal.com 2012-06-29 04:50 pm (UTC)(link)
> А смысл делать остальное на ORM?

Для того чтобы любые изменения в схеме вылезали на этапе компиляции, а не тестирования. Не?

[identity profile] dr-hyder.livejournal.com 2012-06-29 05:03 pm (UTC)(link)
В смысле изменения в модели ORM в коде чтоб вылезали на этапе компиляции? Ну так они и вылезают если ORM используется как просто mapping. Если же именно изменения в схеме, то тут вас можно понимать по разному, может я не правильно вас понял, но компиляции изменения в модели побоку, потому как на этапе компиляции никакого подключения к БД не происходит, или вы что то ещё имели в виду?

Кстати где именно должны вылезать ошибки, на этапе компиляции или на этапе тестирования - это кому как нравится, можно легко на этой почве разжешь холивор dynamic vs static typing :)

[identity profile] w00dy.livejournal.com 2012-06-29 05:11 pm (UTC)(link)
Я в том смысле как это видится в том же nhibernate. Т.е. схема она в базе, маппинги в коде. Меняем схему, меняем маппинг и компилятор показывает что где сломалось. Если же в коде наличествует sql в больших кол-вах, то получается ад и израиль, ибо нужно теперь и его каким-то образом ослеживать. Конечно от этого спасают хранимки, но результат их работы тоже куда-то нужно мапить (тем же ормом?)

PS кончено же static typing рулит и бибикает :)

[identity profile] dr-hyder.livejournal.com 2012-06-29 05:16 pm (UTC)(link)
Всё то же самое происходит ежели использовать hibernate и писать на hql :) Если писать SQL то такая проблема есть конечно, надо осторожно, плюс тесты должны быть. Если же его не используют а пишут на всяких питонах, то там точно тесты должны быть :)

[identity profile] w00dy.livejournal.com 2012-06-29 05:18 pm (UTC)(link)
hql, если я правильно понимаю, это некий аналог linq из .net?

[identity profile] dr-hyder.livejournal.com 2012-06-29 05:25 pm (UTC)(link)
Нет, не совсем, это такой SQL для хайбернейт, тобишь оперирует он не напрямую над БД, а над уже замаплеными сущностями хайбернейта, есть ещё jpql (http://en.wikipedia.org/wiki/Java_Persistence_Query_Language), то же самое фактически, для JPA.

[identity profile] tzirechnoy.livejournal.com 2012-06-29 08:14 pm (UTC)(link)
От этого спасают юнит-тэсты.

Не, то есть есть варианты там embedded SQL или навесок к lintам всяким, но я предпочитаю полагаться на юнит-тэсты.

[identity profile] w00dy.livejournal.com 2012-06-29 08:27 pm (UTC)(link)
А если что-то не покрыли тестами. Вот не надёжно это. С компилятором ведь всё просто - либо собралось, либо не собралось, а потом уже сверху тестами полирнуть.

[identity profile] tzirechnoy.livejournal.com 2012-06-29 09:00 pm (UTC)(link)
Хм. Если что-то одновременно не нашли при рефакторинге и не покрыли юнит-тэстами -- то оно вылезет при боевом тэстировании. Но... У меня обычно всё находится ри рефакторинге. И я знаю что надо делать, если юнит-тэсты покрывают недостаточно функцыональности.
А вот что будут делать любители не-хаскелль компилятора когда он молча проглотит бывшый правильным тайпкастинг -- вот это мне интересно.

[identity profile] http://users.livejournal.com/_windwalker_/ 2012-06-30 09:59 pm (UTC)(link)
юнит тесты не могут спасать от разницы между базой данных и маппингом.

это может быть оформлено как unit-test, но будет являться чем-то большим.

[identity profile] tzirechnoy.livejournal.com 2012-07-02 07:50 am (UTC)(link)
>юнит тесты не могут спасать от разницы между базой данных и маппингом.

Хм?

>это может быть оформлено как unit-test, но будет
> являться чем-то большим.

Ну, хоть горшком, в принцыпе.
Скажыте, а файлы читать/писать юнит-тэстам тожэ нельзя?

[identity profile] henu3detb.livejournal.com 2012-06-29 09:19 pm (UTC)(link)
Чаво? Какой ОРМ ругается на этапе компиляции?

[identity profile] w00dy.livejournal.com 2012-06-29 10:12 pm (UTC)(link)
мапинг в орме то руцями пишется (или чем-то генерируется). Не?

[identity profile] henu3detb.livejournal.com 2012-06-30 09:27 am (UTC)(link)
Чем пишется?
Компилятор может только откомпилировать. Проверить что схема и маппинги совпадают можно в лучшем случае при старте, если фреймворк это сделает. Как правило о проблемах маппинга узнают в рантайме.
На самом деле, если брать хибернейт в частности, то некорректный маппинг это одна сотая часть проблем с ним. Остальные проблемы с которыми сталкиваешься можно найти на форуме. Вот статистика оттуда: Topics: 61805, Posts: 190164.