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-20 06:13 am (UTC)(link)
за использование хранимых говнопроцедур - вон из пофессии.

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

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

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 12:42 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2012-10-20 12:44 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 12:53 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 12:58 (UTC) - Expand

(no subject)

[identity profile] stdray.livejournal.com - 2012-10-20 14:39 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2012-10-20 15:07 (UTC) - Expand

(no subject)

[identity profile] stdray.livejournal.com - 2012-10-20 18:10 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 21:22 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-20 15:17 (UTC) - Expand

(no subject)

[identity profile] stdray.livejournal.com - 2012-10-20 17:35 (UTC) - Expand

(no subject)

[identity profile] firebie.livejournal.com - 2012-10-20 19:19 (UTC) - Expand

(no subject)

[identity profile] stdray.livejournal.com - 2012-10-20 19:39 (UTC) - Expand

(no subject)

[identity profile] firebie.livejournal.com - 2012-10-20 19:46 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 21:21 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2012-10-20 21:30 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 21:35 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2012-10-20 21:38 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 21:41 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-20 21:49 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2012-10-21 07:38 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-21 08:08 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-21 08:54 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-21 09:05 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-21 09:05 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-20 21:45 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 21:50 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-20 22:07 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 22:15 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-20 22:30 (UTC) - Expand

(no subject)

[identity profile] blackyblack.livejournal.com - 2012-10-22 06:36 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2012-10-21 07:40 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-21 08:09 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2012-10-21 08:16 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-21 08:54 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-21 09:06 (UTC) - Expand

(no subject)

(Anonymous) - 2012-10-22 08:35 (UTC) - Expand

(no subject)

[identity profile] norguhtar.livejournal.com - 2012-10-22 03:23 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-20 15:08 (UTC) - Expand

[identity profile] 9zloy.livejournal.com 2012-10-20 01:11 pm (UTC)(link)
тут я за айседа. Нахер код в базе (Хотя я никогда не был настоящим программером и мое мнение можно не учитывать)

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

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

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

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 12:43 (UTC) - Expand

[identity profile] metaclass.livejournal.com 2012-10-20 03:06 pm (UTC)(link)
Какие ORM, какие триггеры?:)
Мы за внешние ключи все еще говорим?:)

[identity profile] norguhtar.livejournal.com 2012-10-22 03:27 am (UTC)(link)
Часто проще написать один триггер, чем воротить код в ORM. К примеру обновление баланса на проведение денежной операции. Ну и по возможности фигачить их только для сохранения целостности в СУБД. Да это можно делать из ORM, но при большом количестве операций использование триггера даст хороший прирост производительности.

[identity profile] sgalitsky.livejournal.com 2012-10-20 04:44 pm (UTC)(link)
ну и идите себе, что возмущаетесь-то?

[identity profile] theiced.livejournal.com 2012-10-20 09:24 pm (UTC)(link)
Так я то их не пишу и не использую, в жопу ебаццо тоже не тянет как то.

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

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

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

[identity profile] theiced.livejournal.com 2012-10-20 09:49 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сник. иди ка вхуй родной, а.

(no subject)

[identity profile] sgalitsky.livejournal.com - 2012-10-20 22:02 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 22:05 (UTC) - Expand

(no subject)

[identity profile] sgalitsky.livejournal.com - 2012-10-20 22:11 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 22:17 (UTC) - Expand

(no subject)

[identity profile] sgalitsky.livejournal.com - 2012-10-20 22:24 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 22:29 (UTC) - Expand

(no subject)

[identity profile] sgalitsky.livejournal.com - 2012-10-20 22:34 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-20 22:42 (UTC) - Expand

(no subject)

[identity profile] sgalitsky.livejournal.com - 2012-10-20 22:44 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-20 22:34 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-10-20 22:52 (UTC) - Expand

(no subject)

[identity profile] sgalitsky.livejournal.com - 2012-10-20 22:57 (UTC) - Expand

(no subject)

[identity profile] sgalitsky.livejournal.com - 2012-10-20 23:04 (UTC) - Expand

(no subject)

[identity profile] sgalitsky.livejournal.com - 2012-10-20 22:38 (UTC) - Expand

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