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

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

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

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

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

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

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

[identity profile] permea-kra.livejournal.com 2009-11-18 10:20 pm (UTC)(link)
s/xqills/xqilla/

[identity profile] theiced.livejournal.com 2009-11-19 12:50 am (UTC)(link)
а нахрена она нужна? если ойтишник не умеет тайпать вслепую - то он даун и его мнение в хуй не впилось.

[identity profile] molnij.livejournal.com 2009-11-19 04:26 am (UTC)(link)
у нас на уровне бухгалтерии, насколько знаю живет какой-то полускриптовый язык который создает sql-код для вычисления. код на языке ессно тоже живет в базе.
вообще говоря, это где-то рядом с грехом. но, чото, реальноприменимых альтернатив не видно.

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

[identity profile] vp.livejournal.com 2009-11-19 06:32 am (UTC)(link)
кстати да, мощнейшая штука.

[identity profile] sergiej.livejournal.com 2009-11-19 08:53 am (UTC)(link)
Зато не надо изобретать никаких велостпедов, скриптоязыков, специальных стандартов файлов итп
Это именно то, что кошерно и по стандартам.

(Anonymous) 2009-11-19 02:52 pm (UTC)(link)
Do you ever realized that the same question "а нахрена она нужна?" can be told about occasionally using Russian when not having it ready?
Especially when talking to an aggressive gay one (like you).

Konechno mogu pisat translitom i dasche hodit na translit.ru. A bit too much for a small comment.

[identity profile] tonal.myopenid.com (from livejournal.com) 2009-11-20 05:34 am (UTC)(link)
В данном случае интероп будет не сложным: отдать поток символов (текст DSL) на обработку и получить назад поток символов (SQL).
Для простоты и отладки можно начать с простого консольного приложения. :)

Page 3 of 3