metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-11-01 11:22 pm

Гуе-визардо-мышедизайнерская разработка софта

А вот скажите, как вы относитесь к инструментам, в которых для подключения, например, к БД, нужно пройти 5-10 экранов визарда? Ну или там поработать полчасика в неудобном мышедизайнере.
С одной стороны, для начинающих это сильно снижает порог входа - нажимаешь "сделать чо нибудь", оно задает кучу вопросов и это чо нибудь делает. С другой стороны - внутренности либ для подобных инструментов чуть более чем всегда совершенно не
пригодны для обычной разработки - "чтобы создать что-то из кода, надо выполнить страницу неадекватных вуду заклинаний".
Я подобные вещи стараюсь не использовать, благо, разработчики все делают для того, чтобы это было неудобно и медленно для сколько-нибудь сложных задач и подобное ретроградство и луддизм находят понимание среди коллег, особенно тех, кто ничем, кроме текста и его редакторов, принципиально не пользуется.

[identity profile] metaclass.livejournal.com 2013-11-02 06:30 am (UTC)(link)
Пробовал. Нахрен такую наглядность.

[identity profile] metaclass.livejournal.com 2013-11-02 07:21 am (UTC)(link)
Мне проще работать с однозначным представлением графов в виде текста, нежели в виде картинок. На картинках приходится скрывать часть информации, чтобы оно было читабельным.
Основную работу все равно приходится вести в тексте (контроль версий, сборка, итд). Два эквивалентных представления (внутренний формат ER/UML софтов и SQL-скрипты) создают лишнюю работу по преобразованию и могут привести к противоречиям.

[identity profile] jakobz.livejournal.com 2013-11-02 12:34 pm (UTC)(link)
А что ты используешь для представления базы в виде текста?

Просто в source control-е же этого нет ничего обычно - там diff-скрипты лежат от нулевой версии, которые чтобы получить текущее положение дел надо еще накатить.

Можно, конечно, нарисовать тулзу, которая будет в текст высовывать все таблички, и связи. Но чот мне кажется сделать это в картинку - намного ловчее.

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

[identity profile] fraks-nsk.livejournal.com 2013-11-02 02:47 pm (UTC)(link)
>> А что ты используешь для представления базы в виде текста?

Вообще-то база изначально в виде текста и существует, исходник так сказать.
Можно поставить вопрос иначе - а что используется для преобразования исходного текста в какую-нибудь визуализацию?

[identity profile] jakobz.livejournal.com 2013-11-02 03:08 pm (UTC)(link)
База существует в виде понятных ей одной бинарных файлов. Ну, и часто - в виде diff-скриптов в source control-е, которые если последовательно запустить - получится такая же база. Где ты там исходник видел?

[identity profile] metaclass.livejournal.com 2013-11-02 07:03 pm (UTC)(link)
У меня два разных исходника: для создания с нуля и для миграции между разными версиями.
В конечном итоге - diff-скрипты и есть исходник.

[identity profile] jakobz.livejournal.com 2013-11-04 10:10 am (UTC)(link)
А как ты эти исходники синхронизируешь?

[identity profile] metaclass.livejournal.com 2013-11-04 10:16 am (UTC)(link)
Я их разрабатываю параллельно, т.к. в общем случае состояние из миграций выводится хреново.
Особенно что касается живых данных в продакшене.

[identity profile] jakobz.livejournal.com 2013-11-04 10:21 am (UTC)(link)
Ну, если допустить что в проде никто схему не меняет, то из миграций состояние выводится однозначно. По каким причинам у тебя прод и скрипты миграции разъезжаются?

[identity profile] metaclass.livejournal.com 2013-11-04 10:35 am (UTC)(link)
Не разъезжаются.
Создавать таблицы в стиле "добавил 10 полей, удалил 5, добавил еще 20" меня огорчает, поэтому я для новых деплойментов создаю базу из финальных скриптов.
Я в голове не смогу удержать разработку, если таблица будет разбросана по нескольким файлам.

[identity profile] theaspect.livejournal.com 2013-11-18 09:39 am (UTC)(link)
Ребе, а ты используешь какую-нибудь тулзу для накатывания и донакатывания миграций?

[identity profile] metaclass.livejournal.com 2013-11-18 09:46 am (UTC)(link)
Самодельная софтина-обновлятор. Она все накатывает - базу, бинарники, итд.

[identity profile] fraks-nsk.livejournal.com 2013-11-04 05:49 am (UTC)(link)
Что бы эти бинарные файлы создать требуется дать серверу команды.
Либо эти команды даются в текстовом виде скриптом и это и есть исходник
либо это делается через ГУЙ.

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

Некоторые сервера даже бэкапы баз делают в текстовый вид.

[identity profile] jakobz.livejournal.com 2013-11-04 10:05 am (UTC)(link)
Речь о том, что исходники базы обычно являются последовательностью SQL-команд, которые меняют схему от начала существования базы. Читать это чтобы понять текущую схему базы никто в здравом уме не будет.

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

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

[identity profile] fraks-nsk.livejournal.com 2013-11-04 08:58 pm (UTC)(link)
>> Речь о том, что исходники базы обычно являются последовательностью SQL-команд, которые меняют схему от
>> начала существования базы. Читать это чтобы понять текущую схему базы никто в здравом уме не будет.

Как по мне - скрипты для перевода базы из старого состояния в новое - это не есть исходник базы.
Исходник - это один скрипт прогнав который получаем базу требуемой структуры.
Другое дело что когда в базе есть какие-то данные (а это практически всегда) то исходника обычно не достаточно и требуются специально написанные скрипты по изменению базы с данными. Они тоже нужны и хранятся в CVS но исходником не являются, это уже типа инструмент.


[identity profile] jakobz.livejournal.com 2013-11-04 09:35 pm (UTC)(link)
Я считаю первоисточником именно последовательность изменений от нулевой версии. Их все равно нужно делать, они позволяют создать бд в последней версии, а также поднять бд любой предыдущей версии до последней. Не вижу смысла поддерживать еще отдельный скрипт, дублирующий информацию в diff-ах. Этот скрипт, кстати, можно сгенерировать со свежей базы, подняв ее diff-ами.

Речь идет только о схеме данных. Всякие хранимки и вьюшки - это тот же код, их надо хранить также как остальные исходники.

(no subject)

[identity profile] berezovsky.livejournal.com - 2013-11-05 02:09 (UTC) - Expand

(no subject)

[identity profile] jakobz.livejournal.com - 2013-11-05 07:54 (UTC) - Expand

(no subject)

[identity profile] fraks-nsk.livejournal.com - 2013-11-05 07:50 (UTC) - Expand

(no subject)

[identity profile] jakobz.livejournal.com - 2013-11-05 08:06 (UTC) - Expand

(no subject)

[identity profile] fraks-nsk.livejournal.com - 2013-11-05 08:12 (UTC) - Expand

(no subject)

[identity profile] berezovsky.livejournal.com - 2013-11-05 08:18 (UTC) - Expand

[identity profile] fraks-nsk.livejournal.com 2013-11-04 05:51 am (UTC)(link)
Кстати, про бинарный вид. Программы они тоже работают только в бинарном виде (условно, не будем вдаваться в различные варианты :) ) Тем не менее, исходником программы называют не этот бинарный вид а ее текст на котором она была написана, на каком-то из языков программирования, в текстовом виде.

[identity profile] jakobz.livejournal.com 2013-11-02 12:04 pm (UTC)(link)
В SQL Server есть диаграммы, в них можно прям потыкать всякие "добавить колонку", драг-н-дропом связи навести. Потом в ней же нажать "generate script", и с ним уже дальше что-то делать - миграцию данных туда дописать, в SVN какой положить как diff-скрипт.

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

[identity profile] berezovsky.livejournal.com 2013-11-02 12:10 pm (UTC)(link)
Отсутствует контроль над ситуацией.
Никогда не знаешь, что лишнего туда генератор напихает и заебёшься сравнивать каждый раз.
А когда каждый символ написан тобой, точно знаешь, чего ждать.
Если нужно видеть схему, почти любая мышедизайнер умеет реверс инжиниринг, как из базы, так и из скрипта.

[identity profile] jakobz.livejournal.com 2013-11-02 12:21 pm (UTC)(link)
Так оно и делает реверс. Все что хранится дополнительно для схемы - это тупо координаты табличек.

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

[identity profile] berezovsky.livejournal.com 2013-11-02 12:27 pm (UTC)(link)
Э-э-э, ты имеешь в виду, что CI лезет в репозиторий, берёт скрипт и прогоняет его по всем продакшенам?

[identity profile] jakobz.livejournal.com 2013-11-02 12:41 pm (UTC)(link)
CI (точнее спец. утилитка) лезет в репозиторий, смотрит что в нем нового относительно спец. таблички в базе, и накатывает скрипты в хронологическом порядке на:
- по коммиту - на базу-болванку, чисто отфильтровать сразу скрипты, которые падают
- по коммиту - на trunk-систему
- на системы девелоперов когда они забирают себе свежий код
- по кнопке/расписанию на QA/UAT-систему
- по кнопке на Staging-систему, куда скидывается база с прода
- по кнопке на прод

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

[identity profile] berezovsky.livejournal.com 2013-11-02 12:43 pm (UTC)(link)
Серьёзно. Но это, похоже, в рамках одной конторы.

[identity profile] jakobz.livejournal.com 2013-11-02 12:53 pm (UTC)(link)
Это самый хороший вариант, который у меня получилось сделать от входа на одном проекте. Там еще хранимки и вьюшки всякие лежали отдельно по файликам, через что их не надо было проводить как diff-скрипты и было видно историю изменений.

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