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

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

Date: 2013-04-04 01:13 am (UTC)
From: [identity profile] fraks-nsk.livejournal.com
>> А если нужен но мешает вот в этом конкретном запросе - то его можно отключить конструкциями типа "+0",
>> правда я не в курсе работает ли этот хак на постгресе.

>>>> Нет хинтов в PostgreSQL. А индекс был добавлен еще давно и как раз было внезапно много данных.

Ну вот я говорю что был добавлен давно - ведь с какой-то целью? А удалив его ту цель поломали.

Я не советовал пользоваться хинтами.
Если упрощенно то
select id, name from table where id = 10
заюзает индекс по ID.

Но если запрос написать в виде
select id + 0 as id, name from table where id = 10
то индекс по ID уже использоваться не будет.

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

Почитал про EXPLAIN - оказалось что это план запроса так называется в PG.
В Firebird оптимизатор поплоше чем в PG будет, но даже и в PG засады случаются, поэтому при написании запроса, если хоть сколько-то интересуют перспективы работы - просмотр получаемого плана обязателен.
В IBExpert вместе с планом еще показывается статистика - из каких таблиц сколько записей было прочитано/изменено/удалено, с применением индексов и без них. И если данные похожи на реальные - сразу видно где засада может вырасти.

Date: 2013-04-04 02:15 am (UTC)
From: [identity profile] norguhtar.livejournal.com

Ну вот я говорю что был добавлен давно - ведь с какой-то целью? А удалив его ту цель поломали.

Была другая выборка.


В IBExpert вместе с планом еще показывается статистика - из каких таблиц сколько записей было прочитано/изменено/удалено, с применением индексов и без них. И если данные похожи на реальные - сразу видно где засада может вырасти.

Фишка в том что иногда вы не можете предсказать какие там данные будут. Только предположить и эти предположения могут быть ошибочны.

Date: 2013-04-04 02:18 am (UTC)
From: [identity profile] fraks-nsk.livejournal.com
Фишка в том что план запроса всегда надо смотреть, ну или из текста запроса точно знать каким будет план - тогда его можно не смотреть.

Date: 2013-04-04 02:31 am (UTC)
From: [identity profile] norguhtar.livejournal.com
Фишка в том что если я буду смотреть планы всех выполняемых запросов, я охренею.

Date: 2013-04-04 02:50 am (UTC)
From: [identity profile] fraks-nsk.livejournal.com
А не надо смотреть всех выполняемых. Надо смотреть при написании.
Запросов не так много, а те что требуют внимания к плану - так и вообще мало.

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

Date: 2013-04-04 03:11 am (UTC)
From: [identity profile] norguhtar.livejournal.com

А не надо смотреть всех выполняемых. Надо смотреть при написании.

Вот заняться мне больше нечем, как сидеть и смотреть как же я туда положу данные. В 90% случаев это будет одинаково, что чтение, что запись. Особенно при CRUD.


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

Еще раз. Их количество ровно такое же какое будет у вас при ваших формах. Фишка в том что если операция типовая мне не надо туда вообще смотреть и писать запрос. А вам приходится смотреть на каждую форму.

Date: 2013-04-04 03:25 am (UTC)
From: [identity profile] fraks-nsk.livejournal.com
Ваш ОРМ решает вопрос как нагенерить 100 форм за 1 день.
У меня нет такого вопроса, формы уже все сделаны и в большом количестве не добавляются.
Мой проект имеет меньше прокладок, он проще, поэтому проще в поддержке и в ознакомлении с ним другим программистом.
Вы меня пытаетесь убедить что без ОРМ я действую неправильно и поэтому мой проект плох.

Date: 2013-04-04 03:35 am (UTC)
From: [identity profile] norguhtar.livejournal.com

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

Используемые мной и остальными в обсуждении этой записи технологии нужны не только для нагенерить 100 форм в день. А еще и для улучшения поддержки кода.

Мой проект имеет меньше прокладок, он проще, поэтому проще в поддержке и в ознакомлении с ним другим программистом.

Ваш проект имеет свои велосипедные прокладки. И это не проще это сложнее. и это хуже. Так-как программисту вместо ага тут используется это надо изучать чего вы там наделали.


Вы меня пытаетесь убедить что без ОРМ я действую неправильно и поэтому мой проект плох.

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

Date: 2013-04-04 04:21 am (UTC)
From: [identity profile] fraks-nsk.livejournal.com
>> Ваш проект имеет свои велосипедные прокладки.
>> И это не проще это сложнее. и это хуже.
>> Так-как программисту вместо ага тут используется это надо изучать чего вы там наделали.

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

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

"Универсальный решатель всего" и "вечно живущая программа" - это бессмысленные утопии. Все имеет свой цикл жизни, программы в том числе.

Date: 2013-04-04 04:44 am (UTC)
From: [identity profile] norguhtar.livejournal.com

Мои прокладки написаны в минималистичном стиле, делают только то что надо мне, их изучить по исходникам гораздо проще чем ваши ОРМ и прочие фреймворки.

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


Остальной код кроме моих прокладок выглядит как из букваря - тут кроме паскаля и прикладной задачи ничего знать и не потребуется.

Конечно конечно.


Мои велосипеды создавались когда вашего супермейнстрима еще не существовало.

Это какого же года ваши велосипеды? Первая стабильная версия Spring Framework вышла в 2004 году. Про JEE я уже вообще молчу первая редакция 1999 год.


По поводу сопровождения после меня - думаю что это просто не потребуется.

Все верно. Его просто выкинут.


"Универсальный решатель всего" и "вечно живущая программа" - это бессмысленные утопии. Все имеет свой цикл жизни, программы в том числе.

Про вечно живущие программы речи не идет. Речь идет о соответствии реалиям.

Date: 2013-04-04 05:56 am (UTC)
From: [identity profile] metaclass.livejournal.com
>Никто в здравом смысле сейчас не изучает фреймворки и ОРМ по исходникам
Не знаю, мне в исходники чужого жабокода приходится лазить регулярно.

J2EE использовать в мелких проектах, поддерживаемых одной конторой - смысла никакого нет. Впрочем, его вообще нет смысла использовать, это дрочево на паттерны и хымыль.

Тут такое дело, что лучше взять адекватный язык и использовать его ORM (http://slick.typesafe.com/), потому что там кода просто на порядок меньше. Язык не требует стоять на голове, чтобы сделать что-либо.

Date: 2013-04-04 06:01 am (UTC)
From: [identity profile] norguhtar.livejournal.com

Не знаю, мне в исходники чужого жабокода приходится лазить регулярно.

Я лазил один раз, мне требовалось понять как делать свои view.


J2EE использовать в мелких проектах, поддерживаемых одной конторой - смысла никакого нет. Впрочем, его вообще нет смысла использовать, это дрочево на паттерны и хымыль.

Новый уже можно, там такого пиздеца с xml не наблюдается уже. Ну или Play! иди Spring Framework. Это дело вкуса. Можно вообще прости господи php если что мелкое надо.

Ну а на другие языки я поглядываю периодически, что в болоте с java не сидеть :]

Date: 2013-04-04 02:55 am (UTC)
From: [identity profile] fraks-nsk.livejournal.com
Пример запроса выдающего журнал документов, с фильтрами.
Запрос определяет сущность формы.
Кроме этого запроса на форме есть еще один, для режима поиска конкретного документа по параметрам.
Поля те же самые но условия задаются по другому. Можно было вструмить те условия и в этот запрос но тогда пострадала бы читаемость запроса.

-- FrmDocs.QSel
-- Журнал складских документов
--
select
bdok.id as id,
iif (bdok.lck = 1, 'Б', '') as lck,
bdok.sf_d as sf_d,
bdok.sf_n as sf_n,
bdok.io as io,
bdok.ndok as ndok,
bdok.data as data,
bdok.type_ as type_,
bdok.idpost as idpost,
iif(oper < 10 , '', 'возврат' ) as ret,
iif(idpost >= 0 , '', 'перемещение') as mov,
post.name || iif((post.gorod = ''), '', ' (' || post.gorod || ')' )
as post_full_name,
bdok.summ_w_nds as summ_w_nds,
bdok.msg as msg,
--
(select count(*) from logprd where (logprd.id_bdok = bdok.id)) as prn_count, -- сколько раз распечатывался документ
--
iif (bdok.io in ('t', 'f'), 'S', '') as ROW_FONTSTYLE, -- перечеркнем удаленные доки
iif(idpost >= 0 , '', 'BLUE' ) as ROW_COLOR -- выделим перемещения синим шрифтом

from bdok
left join spost post on (post.id = bdok.idpost)

where ((bdok.data >= :data1 ) or (bdok.type_ = 1) or (bdok.reserve = 1))
-- по дате будем фильтровать только закрытые документы. А открытые и резервы - целиком,
-- иначе там набирается куча по жизни незакрытых документов
and (bdok.nsklad = :nsklad)
and (bdok.io = :io )
and (bdok.type_ = :type_ )
and ((post.idagent = :idagent) or (:idagent = -1))
and ((bdok.reserve = :reserve) or (:reserve = -1))

order by
data, idpost

Date: 2013-04-04 09:19 am (UTC)
develop7: (dero)
From: [personal profile] develop7
Как бы это ещё развидеть.

Date: 2013-04-04 09:21 am (UTC)
From: [identity profile] berezovsky.livejournal.com
Тебя смущает слово gorod?

Date: 2013-04-04 12:42 pm (UTC)
develop7: (dero)
From: [personal profile] develop7
захардкоденные "возврат" и "перемещение", явно прописанные цвета и т.д.

Date: 2013-04-05 01:18 am (UTC)
From: [identity profile] fraks-nsk.livejournal.com
ага, а если делать "правильно" - то все вынести в настройки, получится гигантский лист настроек, юзера в нем нарукоблудят и на разных рабочих местах одно и то же будет разным цветом раскрашено. Спасибо, не надо.

Date: 2013-04-07 05:48 pm (UTC)
develop7: (Default)
From: [personal profile] develop7
откуда эти бинарные метания из крайности в крайность, а?

Date: 2013-04-08 01:12 am (UTC)
From: [identity profile] fraks-nsk.livejournal.com
Потому как бесит уже ваша другая крайность - "писать как положено" и пофиг на необходимость и что это раздувание и усложнение кода.

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

Цветов которые нормально смотрятся, читаются и различаются - пересчитать по пальцам одной руки. Никто никогда цвета менять не будет. Смысла выносить в константы - нет.

Бывают другие случаи когда использование констант позволяет повысить удобство и код реально сокращает или делает его неуникальным что можно переносить тупо копипастой или вынести общую функцию наружу. Такое у меня тоже есть, практически в каждой форме.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 18th, 2025 09:11 am
Powered by Dreamwidth Studios