Опердень и паттерн-матчинг.
Nov. 18th, 2009 05:11 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
А поимею-ка я вам мозг классической задачкой из любой опердени.
Дано: в базе данных есть таблица фактов (проводки, платежи, вообще любые первичные операции). В таблице обычно имеется дата-время операции, сумма, и куча полей с аналитическими кодами (от кого, кому, дебет-кредит, тип операции, итд).
И есть набор правил, согласно которым эта таблица раскладывается по статьям некоего выходного отчетакоторый ложится на стол Президенту РБ, т.е. к примеру "все проводки с типом операции 126 относятся на статью затрат "Цех забоя и переработки свинины", за исключением проводок со счета 91, который относится на статью затрат "Цех забоя и переработки лошадей"". В таких правилах обычно проверяется где-то 5-10 условий на значения полей записи операции, самих правил может быть порядка сотни штук. И правила могут меняться, например в 2008 году переработка лошадей и свиней делилась на две статьи, а в 2009 министерство статистики решило, что достаточно одной статьи "забой любого скота", но обязательно детализированной по фазам луны.
И вот как бы вы такое решали?
Анализ этого дела в коде выглядит как паттерн-матчинг, реализованный вручную. Но в код это пихать как бэ нехорошо - потому что при изменениях правил придется менять код. А если хранить правила в таблице, получается что мы впадаем в грех реализации собственного языка правил и его обработки.
PS: Здесь немного объяснено, что имеется в виду под "грехом собственного языка".
Дано: в базе данных есть таблица фактов (проводки, платежи, вообще любые первичные операции). В таблице обычно имеется дата-время операции, сумма, и куча полей с аналитическими кодами (от кого, кому, дебет-кредит, тип операции, итд).
И есть набор правил, согласно которым эта таблица раскладывается по статьям некоего выходного отчета
И вот как бы вы такое решали?
Анализ этого дела в коде выглядит как паттерн-матчинг, реализованный вручную. Но в код это пихать как бэ нехорошо - потому что при изменениях правил придется менять код. А если хранить правила в таблице, получается что мы впадаем в грех реализации собственного языка правил и его обработки.
PS: Здесь немного объяснено, что имеется в виду под "грехом собственного языка".
no subject
Date: 2009-11-18 04:17 pm (UTC)SQL is a smart hack but not maintainable at all for a big ruleset.
I'd suggest using SQL for getting the result of classification (SQL is an output of the reporting, not a processing engine.) And PL/SQL (T-SQL) is even worse than SQL. Real maintainance nightmare.
OTOH metaclass should have been started from reporting tools, not from classification phase. It all depends on the requirements of course (I just wonder if he knows about MDX for example).
no subject
Date: 2009-11-18 04:30 pm (UTC)As far as I understood the problem, MDX is overkill for it. We have an amount of fields and some restrictions (to say, queries) applied on resultsets. There is no multidimensional data at all and using such tools as DRolls will dramatically slow the development down.
And, increase the cost, as far.
no subject
Date: 2009-11-18 05:19 pm (UTC)no subject
Date: 2009-11-18 07:00 pm (UTC)no subject
Date: 2009-11-18 07:07 pm (UTC)no subject
Date: 2009-11-19 12:50 am (UTC)no subject
Date: 2009-11-19 02:52 pm (UTC)Especially when talking to an aggressive
gayone (like you).Konechno mogu pisat translitom i dasche hodit na translit.ru. A bit too much for a small comment.