metaclass: (Default)
[personal profile] metaclass
[livejournal.com profile] plumqqz доставил нам очередную ссылку на ужасы обсуждения БД на хабре. Сама статья еще куда ни шло, за исключением представления constraints как мега-фичи (вроде это основа основ любой БД). В комментариях, само собой, дикий ад, трэш, угар, содомия, коровники, заборы, катаформизм хабракармы и голые бизнес-аналитекши.

Самое ужасное там - это когда структуре данных отказывают в праве считаться частью бизнес-логики, упирая на то, что "надо же абстрагироваться от хранилища".
При этом, даже если добится этого абстрагирования - то все равно структура данных будет в памяти, в виде графа объектов, будет нужен дополнительный код по интеграции этой структуры с тем, что живет в БД, и никуда мы от структуры данных не денемся. А уж про то, можно ли считать констрейнты (в т.ч. и сложные, выражаемые только в виде триггеров) частью типов данных - можно дискутировать вечно. По крайней мере, check и foreign key constraints это точно часть типа данных, в случае FK - это еще и зависимые типы, реализованные в понятном виде. В случае unique constraints - уже сложнее, но по идее, тоже зависимый тип (зависит от данных таблицы, в которой он используется).

Так вот, я считаю, что структура данных для бизнес-логики гораздо более важна, чем собственно код. Если вам скажут, что теперь операция с кодом "777029" не облагается НДС - вам всего лишь нужно добавить веточку в паттерн-матчинг. Структура программы от этого не изменится и коллегам вы билд нахрен не сломаете.
А если окажется, что для того, чтобы узнать, как обрабатывается операция, вам нужно заглянуть в настройки в СУБД - то внезапно, в гламурно-причесанной функционально-иммутабельной функции проверки условий появляется грязная монада IO, провайдеры коннектов к БД, автоматическое управление транзакциями, пул коннектов, кэши и прочая черняга и структура данных (к коей я отношу так же и сигнатуры функций) меняется весьма заметно. Альтернативный вариант - оставить функцию чистой, но добавить к ней еще параметров, передаваемых извне, проверить код коллег, записать в трекер и рассказать, что теперь без передачи в нее оккультного набора параметров функция больше не заработает.

Date: 2012-10-19 07:31 pm (UTC)
From: [identity profile] falcrum.livejournal.com
Особенно хорошо чувствуешь важность структуры БД, когда всё уже Х лет работает и поменять нет никакой возможности: просто смотришь с тоской и думаешь - э-эх, вот писал бы это я сейчас...

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

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

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

Date: 2012-10-19 10:08 pm (UTC)
From: [identity profile] theiced.livejournal.com
а ты иди пятый прогресс бар приделывай

(no subject)

From: [identity profile] maxdz.livejournal.com - Date: 2012-10-19 10:19 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-19 10:40 pm (UTC) - Expand

(no subject)

From: [identity profile] maxdz.livejournal.com - Date: 2012-10-19 10:49 pm (UTC) - Expand

(no subject)

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

(no subject)

From: [identity profile] maxdz.livejournal.com - Date: 2012-10-19 11:45 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-19 11:52 pm (UTC) - Expand

(no subject)

From: [identity profile] maxdz.livejournal.com - Date: 2012-10-19 11:53 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-19 11:57 pm (UTC) - Expand

(no subject)

From: [identity profile] maxdz.livejournal.com - Date: 2012-10-19 11:58 pm (UTC) - Expand

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

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

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

Date: 2012-10-19 08:36 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Например, появление новой сущности в первичных документах: не особо меняет логику работы, но заметно меняет структуру БД, структуру графа объектов в памяти клиента или сервера приложений.

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

(no subject)

From: [identity profile] lazy-flyer.livejournal.com - Date: 2012-10-19 08:41 pm (UTC) - Expand

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

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

(no subject)

From: [identity profile] zelanton.livejournal.com - Date: 2012-10-20 08:01 am (UTC) - Expand

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

Date: 2012-10-20 12:45 am (UTC)
From: [identity profile] sergiej.livejournal.com
А ничо если в разных процессах статусы одного и того же объекта разные?

(no subject)

From: [identity profile] pascendi.livejournal.com - Date: 2012-10-20 10:26 am (UTC) - Expand

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

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

(no subject)

From: (Anonymous) - Date: 2012-10-19 09:45 pm (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2012-10-20 06:07 am (UTC) - Expand

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

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

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

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

Date: 2012-10-20 02:18 am (UTC)
From: [identity profile] bydl0coder.livejournal.com
И мне так говорят, и правильно делают. Для коров восьмидесятого уровня РСУБД не нужны.

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

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

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

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

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

(no subject)

From: [identity profile] hazardouskadavr.livejournal.com - Date: 2012-10-19 11:22 pm (UTC) - Expand

(no subject)

From: [identity profile] zamotivator.livejournal.com - Date: 2012-10-19 11:23 pm (UTC) - Expand

(no subject)

From: [identity profile] hazardouskadavr.livejournal.com - Date: 2012-10-19 11:25 pm (UTC) - Expand

(no subject)

From: [identity profile] zamotivator.livejournal.com - Date: 2012-10-19 11:25 pm (UTC) - Expand

(no subject)

From: [identity profile] hazardouskadavr.livejournal.com - Date: 2012-10-19 11:28 pm (UTC) - Expand

(no subject)

From: [identity profile] hazardouskadavr.livejournal.com - Date: 2012-10-19 11:29 pm (UTC) - Expand

(no subject)

From: [identity profile] zamotivator.livejournal.com - Date: 2012-10-19 11:31 pm (UTC) - Expand

(no subject)

From: [identity profile] hazardouskadavr.livejournal.com - Date: 2012-10-19 11:32 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-19 11:28 pm (UTC) - Expand

(no subject)

From: [identity profile] hazardouskadavr.livejournal.com - Date: 2012-10-19 11:30 pm (UTC) - Expand

(no subject)

From: [identity profile] zamotivator.livejournal.com - Date: 2012-10-19 11:30 pm (UTC) - Expand

(no subject)

From: [identity profile] hazardouskadavr.livejournal.com - Date: 2012-10-19 11:35 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-19 11:37 pm (UTC) - Expand

(no subject)

From: [identity profile] hazardouskadavr.livejournal.com - Date: 2012-10-19 11:43 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-19 11:51 pm (UTC) - Expand

(no subject)

From: [identity profile] hazardouskadavr.livejournal.com - Date: 2012-10-19 11:56 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-19 11:58 pm (UTC) - Expand

(no subject)

From: [identity profile] hazardouskadavr.livejournal.com - Date: 2012-10-20 12:00 am (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-10-20 02:27 am (UTC) - Expand

(no subject)

From: [identity profile] tzirechnoy.livejournal.com - Date: 2012-10-20 09:27 am (UTC) - Expand

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

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

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

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

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2012-10-20 06:23 am (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-20 08:55 am (UTC) - Expand

(no subject)

From: [identity profile] tzirechnoy.livejournal.com - Date: 2012-10-20 09:28 am (UTC) - Expand

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2012-10-20 09:45 am (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-20 09:47 am (UTC) - Expand

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2012-10-20 09:50 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-10-20 10:02 am (UTC) - Expand

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2012-10-20 10:18 am (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-20 11:23 am (UTC) - Expand

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2012-10-20 12:29 pm (UTC) - Expand

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

From: [identity profile] stdray.livejournal.com - Date: 2012-10-20 02:39 pm (UTC) - Expand

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2012-10-20 03:07 pm (UTC) - Expand

(no subject)

From: [identity profile] stdray.livejournal.com - Date: 2012-10-20 06:10 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-20 09:22 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-10-20 03:17 pm (UTC) - Expand

(no subject)

From: [identity profile] stdray.livejournal.com - Date: 2012-10-20 05:35 pm (UTC) - Expand

(no subject)

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

(no subject)

From: [identity profile] stdray.livejournal.com - Date: 2012-10-20 07:39 pm (UTC) - Expand

(no subject)

From: [identity profile] firebie.livejournal.com - Date: 2012-10-20 07:46 pm (UTC) - Expand

(no subject)

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

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2012-10-20 09:30 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-20 09:35 pm (UTC) - Expand

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2012-10-20 09:38 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-20 09:41 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-10-20 09:49 pm (UTC) - Expand

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-10-20 09:45 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-20 09:50 pm (UTC) - Expand

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-10-20 03:08 pm (UTC) - Expand

(no subject)

From: [identity profile] 9zloy.livejournal.com - Date: 2012-10-20 01:11 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-20 11:28 am (UTC) - Expand

(no subject)

From: [identity profile] vp.livejournal.com - Date: 2012-10-20 12:31 pm (UTC) - Expand

(no subject)

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

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-10-20 03:06 pm (UTC) - Expand

(no subject)

From: [identity profile] norguhtar.livejournal.com - Date: 2012-10-22 03:27 am (UTC) - Expand

(no subject)

From: [identity profile] sgalitsky.livejournal.com - Date: 2012-10-20 04:44 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-20 09:24 pm (UTC) - Expand

(no subject)

From: [identity profile] sgalitsky.livejournal.com - Date: 2012-10-20 09:32 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-20 09:39 pm (UTC) - Expand

(no subject)

From: [identity profile] sgalitsky.livejournal.com - Date: 2012-10-20 09:43 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-20 09:49 pm (UTC) - Expand

(no subject)

From: [identity profile] sgalitsky.livejournal.com - Date: 2012-10-20 09:55 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-10-20 10:00 pm (UTC) - Expand

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

From: [identity profile] sgalitsky.livejournal.com - Date: 2012-10-20 11:04 pm (UTC) - Expand

(no subject)

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

(no subject)

From: [identity profile] sgalitsky.livejournal.com - Date: 2012-10-20 09:50 pm (UTC) - Expand

(no subject)

From: [identity profile] dennab.livejournal.com - Date: 2012-10-20 01:20 pm (UTC) - Expand

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

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 11th, 2025 08:06 am
Powered by Dreamwidth Studios