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] falcrum.livejournal.com 2012-10-19 07:31 pm (UTC)(link)
Особенно хорошо чувствуешь важность структуры БД, когда всё уже Х лет работает и поменять нет никакой возможности: просто смотришь с тоской и думаешь - э-эх, вот писал бы это я сейчас...

[identity profile] maxdz.livejournal.com 2012-10-19 07:59 pm (UTC)(link)
В годы моего детства, когда я ещё участвовал в написании ЕРП-подобных систем - хранение бизнес-логики в хранимых процедурах было большим "no-no", т.к. функциональность предметной области не должна размываться между кодом и БД.

Если несколько разных подсистем обращаются некоторым одинаковым образом к БД - можно подумать о том, чтобы выделить такие повторяющиеся (и достаточно низкоуровневые, относительно содержимого БД) функции в хранимые процедуры, чтобы избежать дублирования. Но не бизнес-логику.

Ограничения в БД могут быть, но могут и не быть, т.к. бизнес-логика, как правило, накладывает свои (сужающие, заложенные в структуре БД) ограничения.

[identity profile] justy-tylor.livejournal.com 2012-10-19 08:05 pm (UTC)(link)
Строгую границу между "что часть системы типов, а что нет" обычно хрен проведёшь, ибо для этого надобна разница между типом и не-типом, коей в природе не наблюдается. Удобно считать типом то, что пользует не более O(log размер_таблицы), а остальное относить к сессиям верификации датасета.

Про важность структуры данных большое ДА! Если данные (и их модальности) не проебали, то их можно хоть через сто лет обработать новым кодом под новые обстоятельства. А если опаньки, то криптоархеологи и вуду-ритуалы не спасут.

[identity profile] lazy-flyer.livejournal.com 2012-10-19 08:30 pm (UTC)(link)
Ребе, у вас снова появилось много значений слова invoice...
Безнес-логика бизнеса? Или бизнес-логика раеализации бизнес-логики?
В первом случае структуры данных этой логике пох, она на другом уровне оперирует...

[identity profile] zelanton.livejournal.com 2012-10-19 09:00 pm (UTC)(link)
не читал, но осуждаю скажу за entity–attribute–value model поверх реляционной БД и любая хня данных настраивается по месту, а бизнес-логика от данных реально абстрагирована и вообще она на 83% настраивается внедренцем по месту, в гламурной административной консольке.

[identity profile] pascendi.livejournal.com 2012-10-19 09:04 pm (UTC)(link)
Вот только сегодня ругался на эту тему.
Есть, есть люди, которые считают, что бизнес-логика должна быть в BPMS, а в структуре данных (АКА информационный объект) не должно быть сведений о текущем статусе этого объекта...

[identity profile] nivanych.livejournal.com 2012-10-19 09:05 pm (UTC)(link)
У вас тут не хабр, с вами тут, почему-то, особенно не спорят...
А про структуры данных — надо сначала определить, что такое данные.
Вот например, лямбдо-исчислёниё-функция — это данные? ;-)
А то вот, замкнулись в своём SQL!
Есличо, я тут не говорю, что как будто, в этом есть что-то плохое ;-)

(Anonymous) 2012-10-19 09:12 pm (UTC)(link)
Ну я тут неделю писал, а потом вложил это все в структуру и получил код в 1% от прошлого. Но я не пойму почему вы так уверенны что все ПО живет 1 день и что оно (ПО) завтра не потребует давать ответы на те вопросы на которые оно даже не проектировалось.

[identity profile] fd979.livejournal.com 2012-10-19 09:45 pm (UTC)(link)
есть такая серьезная контора, которая одно время запрещала программерам создавать новые таблицы, но новый функционал требовала :)

а вы тут бизнес-логика, структура даанных :)

[identity profile] sgalitsky.livejournal.com 2012-10-19 09:46 pm (UTC)(link)
> В комментариях, само собой, дикий ад, трэш, угар, содомия, коровники, заборы, катаформизм хабракармы и голые бизнес-аналитекши.
- да унылое говно в каментах на самом деле. т.е. вот реально там например отличился не совсем мудак в споре с мускулистым совсем мудаком. похабнейшее зрелище.
какие-то отморози, называщие постгре "постгрой".
и как всегда, 100% участников этого блядского срача вообще никогда не работали с ораклями.
т.е. вот даже не с Database'ом не работали, не говоря уШ о мидлваре, соа там или бпм.

это например мода такая в говне и торфе рассуждать о незнакомых и чуждЫх вещах?

[identity profile] theiced.livejournal.com 2012-10-19 10:08 pm (UTC)(link)
зачем вы читаете то что пишет этот идиот?

[identity profile] bydl0coder.livejournal.com 2012-10-20 02:14 am (UTC)(link)
"Просто надо писать хороший код и не писать плохой". В подходе "фигачим всю логику в БД" мне помимо всего прочего не нравится количество уличной магии, которую надо знать. Чем дороже БД, тем уличной магии меньше, но в обычных языках программирования ее просто нет.

[identity profile] vp.livejournal.com 2012-10-20 06:03 am (UTC)(link)
Ты не поверишь, вчера в реале обсуждали детали реализации одного продукта, стоящего сумасшедшие деньги, цель которого - автоматическая миграция каких угодно данных между базами. Ну ты сам понимаешь, что при этом функционал баз не должен использоваться желательно вообще. Есть какой-то странный постулат, исходящий, скорее всего, от менеджеров, что "этим пользоваться нельзя". Вот от того потом все подобные речи и возникают. А народ затем в 10001 раз изобретает велосипеды, повторяя функционал БД у себя в среднем слое или на клиенте.

[identity profile] trueblacker.livejournal.com 2012-10-20 06:20 am (UTC)(link)
взаимосвязи сущностей предметной области не являются частью бизнес-логики? Ну извините... Ах да, это же про русский бизнес, наверное