metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-11-18 05:11 pm

Опердень и паттерн-матчинг.

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

И есть набор правил, согласно которым эта таблица раскладывается по статьям некоего выходного отчета который ложится на стол Президенту РБ, т.е. к примеру "все проводки с типом операции 126 относятся на статью затрат "Цех забоя и переработки свинины", за исключением проводок со счета 91, который относится на статью затрат "Цех забоя и переработки лошадей"". В таких правилах обычно проверяется где-то 5-10 условий на значения полей записи операции, самих правил может быть порядка сотни штук. И правила могут меняться, например в 2008 году переработка лошадей и свиней делилась на две статьи, а в 2009 министерство статистики решило, что достаточно одной статьи "забой любого скота", но обязательно детализированной по фазам луны.

И вот как бы вы такое решали?

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

PS: Здесь немного объяснено, что имеется в виду под "грехом собственного языка".

[identity profile] gds.livejournal.com 2009-11-18 05:35 pm (UTC)(link)
кстати, мы с верхним каментатором прикидывали, что нехуйово бы кодексы (особенно налоговый и уголовный) загнать в какую-нибудь декларативную хуйню. Ему надо было для корректности/отмазок вроде, а я думал и поабьюзить при случае, если чо.

[identity profile] metaclass.livejournal.com 2009-11-18 05:37 pm (UTC)(link)
О блина, это ж холокост.
Юристы, экономисты и знающие пролог будут нарасхват :)
И как только случай выходит за пределы правил - сразу его на решение высшим законодательным органам, а потом внос в базу :)

[identity profile] gds.livejournal.com 2009-11-18 05:46 pm (UTC)(link)
пока рассмотрят, пока внесут, пока вынесем, ну и не обязательно пролог сразу. Сходу -- даже не знаю, как такую сложную штуку можно рассматривать, чтобы выгодно было.

[identity profile] theiced.livejournal.com 2009-11-18 09:48 pm (UTC)(link)
а хрена. оно там противоречивое на каждом шагу. плюс возникает вопрос толкований. плюс кое что вообще не описано. плюс нету общей терминологии даже внутри одного документа. плюс оно писано умалишёнными пидорасами и нормальным человеком быть понято не может.

[identity profile] gds.livejournal.com 2009-11-19 06:14 am (UTC)(link)
противоречивость как раз есть смысл использовать. А про пидорасов -- ох да, правда.