Индивидуальные бизнес-правила для каждого клиента (asp.net mvc)

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

Как должны быть определены эти правила? Я думал о dll для каждого правила (и связывая их либо с MEF, либо с событиями), но в одном приложении может быть 200-300 клиентов, каждый с несколькими правилами, что становится большим количеством dll.

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

Ваше здоровье.


person Schotime    schedule 22.10.2009    source источник


Ответы (4)


Похоже на приложение, которое может выиграть от использования бизнес-правил, написанных на динамическом языке, таком как Ruby или Python. IronPython прекрасно интегрируется с приложениями, написанными на C# или VB.NET. Вы можете создать DLR ScriptEngine и ScriptScope в своем веб-приложении, внедрить правила, написанные на динамическом языке, на основе параметра идентификатора клиента, чтобы взаимодействовать с вашими живыми объектами Plain Old .NET (PONO). Вы можете хранить свои сотни правил в базе данных, потому что они просто текстовые (например, исходный код Python). Посетите этот блог. сообщение, которое я написал, в котором показано, как внедрить динамические бизнес-правила в приложение .NET.

person W. Kevin Hazzard    schedule 23.10.2009
comment
@Schotime, не зная, что это за правила на самом деле, трудно предположить, как лучше всего их реализовать. Но я очень сомневаюсь, что для этого нужно будет объединить несколько языков. - person Çağdaş Tekin; 23.10.2009
comment
Истинный. Я просто предложил предложение. Уровень интеграции между CLR и DLR просто изумителен. А с кэшированием CallSite в .NET 4.0 производительность изумительна. Больше не нужно бояться Python и Ruby. А писать бизнес-правила на Python — приятное занятие. Опять же, просто предлагая идеи Schotime. - person W. Kevin Hazzard; 27.10.2009

Это может быть хорошим кандидатом для .Net Workflow Foundation

person Tom Anderson    schedule 26.10.2009

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

Это звучит утомительно, но на самом деле это довольно просто и легко сделать правильно.

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

person Bill Yang    schedule 27.10.2009

Я нашел материал, связанный с этим постом, интересным для чтения в системах с несколькими клиентами:

http://ayende.com/Blog/archive/2008/08/13/Mutli-Tenancy--multi-tenant-apps-and-frameworks.aspx

person Andrey Shchekin    schedule 27.10.2009