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] theiced.livejournal.com 2012-10-19 10:08 pm (UTC)(link)
зачем вы читаете то что пишет этот идиот?

[identity profile] hazardouskadavr.livejournal.com 2012-10-19 10:57 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:25 pm (UTC)(link)
Вы действительно считаете кого-то умным в пятницу? Ну бросьте же

[identity profile] zamotivator.livejournal.com 2012-10-19 11:25 pm (UTC)(link)
Действительно.

[identity profile] hazardouskadavr.livejournal.com 2012-10-19 11:28 pm (UTC)(link)
У Вас прекрасная печень.

[identity profile] hazardouskadavr.livejournal.com 2012-10-19 11:32 pm (UTC)(link)
Сеньорита.

[identity profile] theiced.livejournal.com 2012-10-19 11:28 pm (UTC)(link)
он тупой говноед же.

[identity profile] hazardouskadavr.livejournal.com 2012-10-19 11:30 pm (UTC)(link)
о айсед, а почему вы столь озлоблен?

[identity profile] zamotivator.livejournal.com 2012-10-19 11:30 pm (UTC)(link)
Этот дядька очень круто знает СУБД. Хуйни по этому поводу он ни разу не написал (читаю я его пять лет).

[identity profile] hazardouskadavr.livejournal.com 2012-10-19 11:35 pm (UTC)(link)
Какой из, о благороднейший?

[identity profile] theiced.livejournal.com 2012-10-19 11:37 pm (UTC)(link)
он каким то боком связан с банками или похожей говноедской тематикой. я там у Б в комментах приводил пример ЧТО пишут такие вот "умные".

[identity profile] hazardouskadavr.livejournal.com 2012-10-19 11:43 pm (UTC)(link)
все говноеды уверены в том, что остальные-то точно говноеды. таки что вы возразите?

[identity profile] theiced.livejournal.com 2012-10-19 11:51 pm (UTC)(link)
я знаю несколько не-говноедов.

[identity profile] hazardouskadavr.livejournal.com 2012-10-19 11:56 pm (UTC)(link)
я, конечно, стесняюсь спросить, но всё же: кто говноед? это весьма важно.

[identity profile] theiced.livejournal.com 2012-10-19 11:58 pm (UTC)(link)
крокодил же.

[identity profile] hazardouskadavr.livejournal.com 2012-10-20 12:00 am (UTC)(link)
тот самый?

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

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

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