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] metaclass.livejournal.com 2012-10-19 08:36 pm (UTC)(link)
Например, появление новой сущности в первичных документах: не особо меняет логику работы, но заметно меняет структуру БД, структуру графа объектов в памяти клиента или сервера приложений.

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

[identity profile] lazy-flyer.livejournal.com 2012-10-19 08:41 pm (UTC)(link)
Ребе, структура данных в бизнесе - первична. И напрямую связана с бизнес-логикой бизнеса. Код, оперирущий данными, только их перерабатывает и представляет в виде приемлемым для бизнес-логики бизнеса.
Что не означает, как вы правильно заметили, необходимости хранить логику бизнеса в структурах данных. Умело запроектированная БД - благо и нимб на голову аналитика.
Edited 2012-10-19 20:41 (UTC)

[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!
Есличо, я тут не говорю, что как будто, в этом есть что-то плохое ;-)

[identity profile] metaclass.livejournal.com 2012-10-19 09:10 pm (UTC)(link)
Упоминали ли разработчики оного зависимые типы и бенджамина пирса?:)

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

[identity profile] metaclass.livejournal.com 2012-10-19 09:12 pm (UTC)(link)
Я забыл про это написать, что для начала код это тоже данные, и типы это данные и вообще все данные, просто с разным поведением:)

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

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

(Anonymous) 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] theiced.livejournal.com 2012-10-19 10:08 pm (UTC)(link)
а ты иди пятый прогресс бар приделывай

[identity profile] maxdz.livejournal.com 2012-10-19 10:19 pm (UTC)(link)
Хорошая идея. Может, в следующей версии. :)

(Anonymous) 2012-10-19 10:25 pm (UTC)(link)
Это что за бред? Оксюморон какой, то. 1) Серьезная и запрещала и 2) програмистам

[identity profile] theiced.livejournal.com 2012-10-19 10:40 pm (UTC)(link)
а сортировочку ещё веселее сделаешь, макака колхозная?

[identity profile] maxdz.livejournal.com 2012-10-19 10:49 pm (UTC)(link)
Ты всё перепутала, макака колхозная - я же оранжевый бандеровец.

А сортировочка и так весёлая, вроде. :)

[identity profile] hazardouskadavr.livejournal.com 2012-10-19 10:57 pm (UTC)(link)
Вот я, конечно, за себя скажу, но я читаю это по той же причине, что и вас, благородный сэр
А уж что за причина - это явно никому не интересно

[identity profile] theiced.livejournal.com 2012-10-19 11:18 pm (UTC)(link)


больше ада!

[identity profile] zamotivator.livejournal.com 2012-10-19 11:19 pm (UTC)(link)
Потому что он умный.

[identity profile] hazardouskadavr.livejournal.com 2012-10-19 11:22 pm (UTC)(link)
жырно

Page 1 of 6