metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-04-03 01:06 am

В Советской Белоруссии SQL разжигает айседа

http://theiced.livejournal.com/238346.html
Собственно, про кобол я не знаю, на дельфи пишу уже 15 лет и никак избавится от него не могу (слишком много легаси кода), а вот про SQL я с ним не согласен.
Сам по себе SQL очень хорошо подходит для генерации отчетов. Если отчет сводится к фильтрации-сортировке-группировке множеств - идеально. С рекурсивными CTE - еще и деревья можно обрабатывать, не особо включая мозг. Всунув поверх этого минимальных размеров постобработку на какой-нибудь функциональщине, можно сделать почти любой отчет, пришедший в голову свихнувшимся на Excel выпускникам нархоза, работающим в минстате, минфине и МНС.

Но когда доходит до процедурных расширений, API между СУБД и клиентскими приложениями или каких-нибудь вещей, которые забыли вовремя добавить в стандарт - начинается полная, немыслимая жопа.
Например, проклятая тема - генерация автоинкрементных ключей и возвращение значений автоматически заполненных полей. Кто во что горазд - identity, генераторы, sequence, функции (в каждой СУБД названные по разному), returning, заебы на тему "вызывать в той же транзакции и сессии" и прочая и прочая. Про вариации на тему "вернуть поле, которое заполняется автоматически, но не является ключом/identity" лучше даже не думать.
Неудивительно, что люди при первой же возможности сбегают в ORM (которые являются уже второй производной от всего этого маразма и несут на себе его неизгладимый след).

[identity profile] vp.livejournal.com 2013-04-03 06:51 am (UTC)(link)
Давайте определимся с целями и задачами, а то так далеко зайдем.
Цель - не "сгенерить по имеющимся классам какую-то базу и какой-то ДАО". Получится херня.
Должна нормально вдумчиво проектироваться база, под нее писаться на ОРМе прослойка. Цель прослойки - упрощение работы с базой и простота будушего рефакторинга. Но мозг это не отменяет, и то, что он генерирует, нужно смотреть глазами.

[identity profile] fraks-nsk.livejournal.com 2013-04-03 07:03 am (UTC)(link)
Со всем согласен, кроме того что прослойка должна писаться на ОРМ.
И вообще, толщина прослойки начинается от нуля.

[identity profile] norguhtar.livejournal.com 2013-04-03 03:59 pm (UTC)(link)
Использование ORM позволяет мне эту прослойку банально по базе сгенерить. Я обычно сначала проектирую СУБД, потом генерю по нему ORM и все. Дальше мне только DAO добавлять нужное. А это я делаю через spring-data http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/repositories.html

В результате создание слоя для работы с СУБД у меня занимает весьма мало времени по сравнению с другими методами. И причем я сразу получаю код который могу отдать другому человеку.

[identity profile] fraks-nsk.livejournal.com 2013-04-03 04:27 pm (UTC)(link)
У вас наверное проблема в том что кодинг занимает много времени. Вы наверное делаете по приложению в неделю. Может быть да, в вашем случае выпекание пирожков на потоке имеет смысл.
Моей программке начиная от первых версий лет наверное 15 уже, можете прикинуть как часто мне приходится писать новые привязки к полям.

Каждому инструменту - свое место.

[identity profile] norguhtar.livejournal.com 2013-04-03 05:21 pm (UTC)(link)

У вас наверное проблема в том что кодинг занимает много времени. Вы наверное делаете по приложению в неделю. Может быть да, в вашем случае выпекание пирожков на потоке имеет смысл.

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

[identity profile] fraks-nsk.livejournal.com 2013-04-03 06:02 pm (UTC)(link)
Из того что я потрачу на 5 минут меньше на кодинг не изменится ровным счетом ничего.

[identity profile] norguhtar.livejournal.com 2013-04-03 06:09 pm (UTC)(link)
Я рад за вас, но меня лично сильно раздражает необходимость каждый раз писать код для такой тривиальной операции как CRUD.

[identity profile] fraks-nsk.livejournal.com 2013-04-03 06:03 pm (UTC)(link)
После быстрого старта бывают проблемы с медленным развитием когда этот быстрый старт надо перепроектировать.

У меня старт был давным-давно, сейчас просто эволюция вместе с бизнесом.

[identity profile] norguhtar.livejournal.com 2013-04-03 06:08 pm (UTC)(link)

После быстрого старта бывают проблемы с медленным развитием когда этот быстрый старт надо перепроектировать.

Узнайте для себя такую вещь как слабая связность. И быстрый старт тут касается не проектирования, а написания кода.

[identity profile] metaclass.livejournal.com 2013-04-03 06:17 pm (UTC)(link)
В этой вашей жабе эта "слабая связность" приводит к аду фреймворков с конфигурациями на хымыле, которые в 90% нахрен не нужны. FactoryOfFactoryOfFactoryOfFacade

[identity profile] evil-invader.livejournal.com 2013-04-03 08:17 pm (UTC)(link)
Не правда! Сейчас конфиг плавно смещается в строну аннотаций. Небольшой конфиг на хмыле, а дальше код с аннотациями.

>>"FactoryOfFactoryOfFactoryOfFacade"

Слишком утрированно

[identity profile] metaclass.livejournal.com 2013-04-03 08:41 pm (UTC)(link)
Ага, аннотации. Ad hoc имитация нормальной системы типов.
После нормальных языков с нормальными типами и метапрограммированием это все выглядит, как попытка любой ценой соблюсти обратную совместимость и не отпугнуть индусов из бангалора.
Похвальное желание, с точки зрения организации процессов разработки, но адекватные разработчики получившееся творчество будут избегать любой ценой.

[identity profile] evil-invader.livejournal.com 2013-04-03 08:44 pm (UTC)(link)
Т.е. адекватных разработчиков на java не существует? Я правильно понимаю?

[identity profile] metaclass.livejournal.com 2013-04-03 08:46 pm (UTC)(link)
Существуют, вынужденно.
Как и мне приходится писать на всякой хреновой чуши, по причине того, что миграция на адекватные языки требует невменяемых усилий.

[identity profile] norguhtar.livejournal.com 2013-04-04 12:21 am (UTC)(link)
Эм вообще с версии 5 java появились аннотации и ад пропал. Теперь это прошивается на уровне кода аннотациями. xml описалово у меня занимает всего 80 строк. И то там по большей части подключение СУБД и настройки для авторизации

[identity profile] vp.livejournal.com 2013-04-03 05:20 pm (UTC)(link)
>Я обычно сначала проектирую СУБД, потом генерю по нему ORM и все

Генерите ОРМ по базе? Или как?

[identity profile] norguhtar.livejournal.com 2013-04-03 05:24 pm (UTC)(link)
Да по базе. Для JPA есть отличный инструментарий в Eclipse. Открываешь соединение говоришь сгенери мне отсюда классов. Далее максимум надо сделать доводку по месту.

[identity profile] vp.livejournal.com 2013-04-03 05:32 pm (UTC)(link)
И как, информации чисто из базы хватает? Все корректно отображает? То есть по базе полностью угадывается ваша "задумка" и генерируется?

[identity profile] norguhtar.livejournal.com 2013-04-03 05:37 pm (UTC)(link)
Да. Обычно надо подчистить такие косяки генератора как даты и время в виде SQL типов а не в виде Calendar, если я не захватил таблицу связанную внешним ключом добавить ManyToOne или OneToMany. Но это все опять же через автодополнение делается левой ногой. Ну и ManyToMany не строит. Но большую часть угадывает. Сиквенсы тоже перед генерацией в визарде задать можно.

[identity profile] evil-invader.livejournal.com 2013-04-03 08:20 pm (UTC)(link)
Можно наоборот. Набросал энтитей - оно сгенерило таблицы в базе. Но это в простом случае. А так конечно по базе оно очень чётко генерит нужные классы.