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] bydl0coder.livejournal.com 2012-10-20 02:27 am (UTC)(link)
"Да вы чо, пацаны, есть же перл!". В общем, многих приходится читать в специальных очках.

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

[identity profile] thedeemon.livejournal.com 2012-10-20 06:07 am (UTC)(link)
А как же ко-данные?! :)

[identity profile] theiced.livejournal.com 2012-10-20 06:13 am (UTC)(link)
за использование хранимых говнопроцедур - вон из пофессии.

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

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

Да, и со всякими разными монгаДБ целостность данных мы тоже выбрасываем? :)

[identity profile] metaclass.livejournal.com 2012-10-20 06:38 am (UTC)(link)
А кого еще читать среди засилья монг, риаков, JSON-сериализации артурегами и мемкэшей.

[identity profile] zelanton.livejournal.com 2012-10-20 08:01 am (UTC)(link)
А почему вы спрашиваете? )

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

[identity profile] tzirechnoy.livejournal.com 2012-10-20 09:27 am (UTC)(link)
Ну, поскольку тот факт, что кто-то что-то хорошо знает, не означает что он не тупой или не говноед, то на этом спор можно закончить, поскольку стороны пришли к согласию.

[identity profile] tzirechnoy.livejournal.com 2012-10-20 09:28 am (UTC)(link)
Да ладно тебе, какой локин. Пишы их не перле -- и смигрируешь хоть куда.

[identity profile] vp.livejournal.com 2012-10-20 09:45 am (UTC)(link)
Ребе, я вас не о фаерберде спрашиваю. А о ссылочной ка кбы целостности.
Мы будем этот закат солнца делать вручную?
Только не говорите. что если мы положим магическую базу магические объекты, на этом работа закончится. Я еще раз скажу всеми нелюбимое изречение: это все хорошо только для ограниченного круга ну очень простых задач.

[identity profile] theiced.livejournal.com 2012-10-20 09:47 am (UTC)(link)
ссылочную целостность может спокойно обеспечить клиентская либа же.

[identity profile] vp.livejournal.com 2012-10-20 09:50 am (UTC)(link)
поперхнулся. Ребе, что вы такое говорите? Мы об одном и том же вообще?

[identity profile] metaclass.livejournal.com 2012-10-20 10:02 am (UTC)(link)
Но мы же не хотим сами делать то, что умеет СУБД :)

[identity profile] vp.livejournal.com 2012-10-20 10:18 am (UTC)(link)
Ну вот мы подошли к главному, к расстановке точек над и. И что является говноедством :)

[identity profile] pascendi.livejournal.com 2012-10-20 10:26 am (UTC)(link)
Если один и тот же экземпляр объекта одновременно может участвовать в нескольких процессах -- то возможно.
Но не в том случае, о котором я говорил. :-)

[identity profile] theiced.livejournal.com 2012-10-20 11:23 am (UTC)(link)
говноедством является использование кода-в-базе! ещё раз - у вас вендор лок-ин на файрбёрд - я ваше мнение по этому конкретному вопросу ставлю на уровень мнения максдз например.

[identity profile] theiced.livejournal.com 2012-10-20 11:28 am (UTC)(link)
далее, современные ормы и прочая обеспечивают возможность ссылочной целостности и прочего путём написания таких же объёмов кода (а то и меньше) как и в говнотриггерах.

[identity profile] vp.livejournal.com 2012-10-20 12:29 pm (UTC)(link)
Вендор лок будет по любому случаю на любой базе, потому что sql-92 стал настолько сферическим, что базы друг от друга отличаются по всему, и никакого бесшовного перехода так или иначе не бывает.

[identity profile] vp.livejournal.com 2012-10-20 12:31 pm (UTC)(link)
То есть мы придумаем на коленке механизм транзакций, потом придумаем механизм ссылочной целостности?

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

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

[identity profile] theiced.livejournal.com 2012-10-20 12:43 pm (UTC)(link)
транзакции же используются. без них никак. механизмы ссылочной целостности реализуются ормами.

[identity profile] vp.livejournal.com 2012-10-20 12:44 pm (UTC)(link)
Руками-не руками, какая разница? Таргет-платформа не понимает ваши запросы от предыдущей платформы. Потому что никакой сейчас не 92й год :)

[identity profile] theiced.livejournal.com 2012-10-20 12:53 pm (UTC)(link)
какой МОЙ запрос. запрос генерит орм-или-его-аналог. я тупо пишу что то вида: `Point.where(:created_at => Time.now.beginning_of_day .. Time.now).where(:customer_id => [1, 2, 10]).order(:name).all` и мне реально похер какая там база и какой говносрез недострандарта сикль она умеет. кампутир железный, пусть он думает.

Page 3 of 6