Это относится к базе данных или коду? - PullRequest
1 голос
/ 30 июля 2009

У меня есть база данных, которая содержит таблицу депозитов (гарантийные депозиты, депозиты для домашних животных и т. Д.), И в некоторых случаях эти депозиты необходимо уменьшить, т.е. кто-то покупает дополнительное страхование.Должна ли я иметь таблицу с именем, скажем, alter_deposits, которая будет содержать условия сокращения, а также сумму или это то, что входит в код приложения в качестве бизнес-логики?

Заранее спасибо!

Ответы [ 5 ]

3 голосов
/ 30 июля 2009

В таких случаях я хотел бы попытаться обобщить правила как можно более простые. Таким образом, у вас может быть плоское правило сокращения, которое снимает х%. Тогда у вас может быть правило, основанное на условиях, так что вы можете сказать, снять x%, когда баланс больше, чем y.

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

И вы можете сделать это без планирования времени простоя, добавление нового правила должно быть таким же простым, как обновление БД, и если есть новый тип правила, вы можете просто развернуть новый фрагмент кода. Конечно, это зависит от вашего окружения, я знаю, что в .net это должно быть прямо вперед.

Я работал над действительно забавной системой обработки, основанной на правилах, где мы по существу построили двоичное дерево операндов And & Or, операторы которых возвращали бы true или false, если дерево возвращало true, мы выполняли действие. Все это было сериализовано в Xml, что позволило механизму хранения не зависеть от типов правил и требований к данным.

Редактировать

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

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

Если вы используете .net, вы на самом деле можете построить довольно динамичную систему с использованием дерева выражений и динамически создавать лямбы, которые могут представлять операнды и действия.

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

Расширение этой концепции, на мой взгляд, является программированием рабочих процессов. Поэтому, когда приходит депозит, скажем, если после выполнения ваших правил депозит будет> 25%. И в этом случае вы требуете, чтобы сотрудник одобрил это дело. Механизм рабочего процесса может инкапсулировать логику этого типа и выразить ее более гибким способом, чем традиционное кодирование. Но со всеми вещами есть много минусов. Каждый раз, когда я начинал свой путь с использования механизма рабочих процессов, он заканчивал тем, что в конце концов был потрошен по разным причинам, но обычно потому, что наши рабочие процессы слишком просты, чтобы оправдать затраты на изучение механизма.

2 голосов
/ 30 июля 2009

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

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

1 голос
/ 30 июля 2009

Что вам нужно определить, так это вероятность того, что эти условия могут измениться. Поместив их в базу данных и обернув вокруг них пользовательский интерфейс, их было бы легче изменить, особенно если есть какой-то пользователь типа администратора, который не является программистом поддержки.

0 голосов
/ 30 июля 2009

Вы должны учитывать это, поскольку транзакции «Транзакции» являются мощными в SQL (и только недавно правильно реализованы в MySQL), даже если вы можете увеличивать или уменьшать метод Транзакции, он дает вам возможность возвращать денежные единицы сущности до сбоя.

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

0 голосов
/ 30 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...