metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-10-19 10:23 pm
Entry tags:

Бизнес-логика: Структура данных vs код

[livejournal.com profile] plumqqz доставил нам очередную ссылку на ужасы обсуждения БД на хабре. Сама статья еще куда ни шло, за исключением представления constraints как мега-фичи (вроде это основа основ любой БД). В комментариях, само собой, дикий ад, трэш, угар, содомия, коровники, заборы, катаформизм хабракармы и голые бизнес-аналитекши.

Самое ужасное там - это когда структуре данных отказывают в праве считаться частью бизнес-логики, упирая на то, что "надо же абстрагироваться от хранилища".
При этом, даже если добится этого абстрагирования - то все равно структура данных будет в памяти, в виде графа объектов, будет нужен дополнительный код по интеграции этой структуры с тем, что живет в БД, и никуда мы от структуры данных не денемся. А уж про то, можно ли считать констрейнты (в т.ч. и сложные, выражаемые только в виде триггеров) частью типов данных - можно дискутировать вечно. По крайней мере, check и foreign key constraints это точно часть типа данных, в случае FK - это еще и зависимые типы, реализованные в понятном виде. В случае unique constraints - уже сложнее, но по идее, тоже зависимый тип (зависит от данных таблицы, в которой он используется).

Так вот, я считаю, что структура данных для бизнес-логики гораздо более важна, чем собственно код. Если вам скажут, что теперь операция с кодом "777029" не облагается НДС - вам всего лишь нужно добавить веточку в паттерн-матчинг. Структура программы от этого не изменится и коллегам вы билд нахрен не сломаете.
А если окажется, что для того, чтобы узнать, как обрабатывается операция, вам нужно заглянуть в настройки в СУБД - то внезапно, в гламурно-причесанной функционально-иммутабельной функции проверки условий появляется грязная монада IO, провайдеры коннектов к БД, автоматическое управление транзакциями, пул коннектов, кэши и прочая черняга и структура данных (к коей я отношу так же и сигнатуры функций) меняется весьма заметно. Альтернативный вариант - оставить функцию чистой, но добавить к ней еще параметров, передаваемых извне, проверить код коллег, записать в трекер и рассказать, что теперь без передачи в нее оккультного набора параметров функция больше не заработает.

[identity profile] metaclass.livejournal.com 2012-10-20 09:49 pm (UTC)(link)
Я делаю sql cкриптами.
А схема и прочее для ормов генерируется из модели, т.к. полное описание предметки в виде модели слишком сложное, чтобы его запихивать в любой частный язык программирования (за исключением разного рода лиспов, разве что)

[identity profile] theiced.livejournal.com 2012-10-20 09:49 pm (UTC)(link)
ааа, ты настолько крут что вырос до насаящщага рукавадзителя праекта? ну чо, пацан пришё к успеху, молодец. только в этом случае твоё мнение по базам стоит ещё меньше чем мнение белнетмона-с-файрбёрдом, например.

[identity profile] theiced.livejournal.com 2012-10-20 09:50 pm (UTC)(link)
вот, до вас доходит же потиху. именно - ВЫКИНУТЬ К ХУЯМ всю это ненадёжную поебень.

[identity profile] sgalitsky.livejournal.com 2012-10-20 09:50 pm (UTC)(link)
вообще, интересно, как подобные вам синюшные "надмозги" бредят рабочим материалом вне работы.
вы что, по начальственному страпону дома тоскуете, ась?

[identity profile] sgalitsky.livejournal.com 2012-10-20 09:55 pm (UTC)(link)
не, я настолько туп, что меня даже на военной кафедре полковники обходили.
не говоря о редкомозглых програмерах.
- какой "кодинг". только шпуксы, админство и наркоманский хардкор.

[identity profile] theiced.livejournal.com 2012-10-20 10:00 pm (UTC)(link)
а мне тут сообщают что ты говно1сник. иди ка вхуй родной, а.

[identity profile] sgalitsky.livejournal.com 2012-10-20 10:02 pm (UTC)(link)
родной, я тебя с 1с имел, когда тебе лет пять было.
забыл, поди?
сливаешься. исписался. ойвэй..

[identity profile] theiced.livejournal.com 2012-10-20 10:05 pm (UTC)(link)
опять какие то гомосячьи фантазии. леееесом.

[identity profile] metaclass.livejournal.com 2012-10-20 10:07 pm (UTC)(link)
А зачем ее выкидывать?
Констрейнты в виде FK,Unique и собственно структуры БД я оставлю по любому (по крайней мере, пока базы с ACID и типизированной функциональщиной не появится на горизонте).

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

[identity profile] sgalitsky.livejournal.com 2012-10-20 10:11 pm (UTC)(link)
уважаемый, Вы из Эстооонии?
говорят, мальчик Пыыйсд от восторга проебал подаренное мороженное, после чего неделю плакал в вафельный рожок.

про ебаццо в сракатан - это, кстати, Ваша тема.

[identity profile] theiced.livejournal.com 2012-10-20 10:15 pm (UTC)(link)
FK и прочая генерится ормом. триггера и хранимые говнопроцедуры не нужны же! об этом и разговор. обычно эти критические места - это различного рода отчёты и похуй сколько оно будет генериться - минуту или три.

[identity profile] theiced.livejournal.com 2012-10-20 10:17 pm (UTC)(link)
с 1сниками не разговариваю, от этого тупеют так же как от хабра. проследуйте нахуй. /ignor

[identity profile] sgalitsky.livejournal.com 2012-10-20 10:24 pm (UTC)(link)
уважаемый айсед, будьте любезны писать иносраные слова правильно, - например, вместо "ignor" - "ignore"..
Вашу степень отупения и озалупления на окружающую среду я уже примерно представляю.

[identity profile] theiced.livejournal.com 2012-10-20 10:29 pm (UTC)(link)
ребе М, у вас в комментах завелась говорящая какашка. уберитесь пожалуйса, некультурно.

[identity profile] metaclass.livejournal.com 2012-10-20 10:30 pm (UTC)(link)
Не, ты что. Меня ждать отчета даже 10 секунд бесит, а ты предлагаешь минуту :)

[identity profile] sgalitsky.livejournal.com 2012-10-20 10:34 pm (UTC)(link)
акуеть. айсед просит за ним убирать.
дайте две, плз..

[identity profile] metaclass.livejournal.com 2012-10-20 10:34 pm (UTC)(link)
Ребе, мне придется банить тогда и вас и максдз и забиватора и артурега и вообще всех кто невежливо разговаривает, а я не хочу никого банить, мне тогда не с кем срачи будет разводить :)

[identity profile] sgalitsky.livejournal.com 2012-10-20 10:38 pm (UTC)(link)
это што было-то? песок в вагину попал или убунта с первого раза не встала?

[identity profile] metaclass.livejournal.com 2012-10-20 10:42 pm (UTC)(link)
Можно, впрочем, комменты заморозить, во избежание излишних взаимных оскорблений. :)

[identity profile] sgalitsky.livejournal.com 2012-10-20 10:44 pm (UTC)(link)
по мне так окай вообще. не я же от социума отбрыкиваюсь..)

[identity profile] theiced.livejournal.com 2012-10-20 10:52 pm (UTC)(link)
причём тут невежливо разговаривает. оно 1сник, это просто противо видеть.

[identity profile] sgalitsky.livejournal.com 2012-10-20 10:57 pm (UTC)(link)
за 1сника можно и по личику получить. между прочим.
- выражения-то выбирайте.
Edited 2012-10-20 22:57 (UTC)

[identity profile] sgalitsky.livejournal.com 2012-10-20 11:04 pm (UTC)(link)
тащемта интересно наблюдать за мыслительным процессом у амеб.
если кому-то внезапно требуется базу 1с на oracle перенести у заказчика, то амеба считает этого человека 1сником.

я как-то вот даже теряюсь немного от такого мозгового разброда. то ли одноэсники подросли, то ли амебы совсем амебнулись..
Edited 2012-10-20 23:17 (UTC)

[identity profile] vp.livejournal.com 2012-10-21 07:38 am (UTC)(link)
Ну дык для того, чтобы сделать апдейт схемы, необходимо эту схему представлять. И необходимо понимать, на каком состоянии у тебя находится обновляемая система к твоей текущей версии, до которой ты собираешься ее догнать.
Как ты это делаешь без понимания того, как устроена база? (мы только что постулировали, что только так и нужно и нам пофиг что там)

[identity profile] vp.livejournal.com 2012-10-21 07:40 am (UTC)(link)
То есть как обычно есть золотая пуля и на самом деле вопрос выеденого яйца не стоит. Ок.

Page 5 of 6