7

¡Saludos!Reglas de negocio dinámicas en una aplicación web

Trabajar en un proyecto basado en web eran reglas de negocio y la lógica debe ser personalizada por el cliente. Quiero hacer esto sin tener que volver a compilar la aplicación cada vez que registremos un nuevo cliente en el sistema. Las arquitecturas que he descrito hasta ahora son:

  1. Flujo de trabajo de Windows: crear flujos de trabajo dinámicos y guardarlos en la base de datos.
  2. Reflexión: Crear una interfaz de reglas de negocio y usar la reflexión para cargar el ensamblado de cliente personalizado.
  3. Un verdadero motor de reglas de negocio
  4. Implementación de un mapa de estructura de tipo contenedor de IOC. [zaff: añadido 6/4]

¿Alguna vez ha implementado algo similar a esto? Si es así, ¿cuál es tu experiencia? Y finalmente, ¿hay alguna otra solución que deba explorar?

Gracias por su ayuda !!

Respuesta

2

He implementado la mayoría de los enfoques que menciona. La respuesta puede depender de una variedad de factores.

¿Qué papel (s) cliente va a hacer los cambios en las reglas de negocio (por ejemplo, el analista de negocio, desarrollador, usuario de la energía, etc.)? El soporte significativo para los analistas de negocios puede requerir un motor de reglas con reglas externalizadas en un DB y una UI utilizable.El soporte significativo para los desarrolladores puede ser tan simple como aprovechar algo como MEF (http://www.codeplex.com/MEF).

También puede tener en cuenta la frecuencia con la que se deben cambiar las reglas de negocio y los tipos de requisitos operativos asociados (por ejemplo, el proceso del host debe seguir ejecutándose, el dominio de descarga de aplicaciones está bien, etc.). Una buena selección puede requerir una reflexión cuidadosa sobre las necesidades futuras probables contra improbables.

2

Puede hacer reglas de negocio basadas en datos, como this. Los árboles de decisión también pueden ser un buen camino a seguir.

También puede pensar en la programación orientada a aspectos como una forma de implementar reglas de negocios.

Mi única advertencia con un motor de reglas de inducción Rete es que los conjuntos de reglas deben mantenerse pequeña y cerca de los objetos que los utilizan. Si puede encapsular el comportamiento de un objeto en un motor de reglas que es parte de su estado, mucho mejor. No me importa la solución "empresarial" que vuelca miles de reglas en un motor de reglas único que se convierte en una dependencia para cada parte de la empresa.

1

Puede que este no sea el mejor enfoque, pero mi empresa ha implementado su opción # 2 en varios casos, con éxito.

Básicamente, configurar los clientes en un archivo de base de datos o de configuración, y para cada cliente, habría una tabla de consulta que almacena un nombre de clase para invocar por cualquier operación de negocio para llevar a cabo. Cuando el código recibe una solicitud para el cliente A, busca la clase para usar, la crea y la ejecuta a través de la reflexión.

No soy un gran fan de poner las cosas relacionadas con el código en la base de datos, pero en realidad funciona bien y no es demasiado complicado en este caso.

0

me gusta WF, pero si usted ha mirado en él y decidido que quiere algo diferente, usted debe buscar en K2. Además, BizTalk tiene soporte BRE.

0

he creado un motor de reglas dinámico basado en el siguiente código abierto .NET de reglas de negocio del motor NxBRE. Usé el motor Flow como el principal ejemplo para mi motor de reglas dinámicas.

He utilizado la misma arquitectura mencionada en su pregunta.

1

que sugieren una combinación de 1 y 3.

Pero no almacenan el flujo de trabajo en una base de datos, almacenar es un flujo de árbol de decisión o regla (como los llamamos).

Cambiar el flujo de trabajo para adaptarlo a un cliente en particular o federarlos a su perfil es una tarea simple cuando tiene una herramienta visual accionada por acción, como Visual Rules. También hay un gran beneficio al hacer que su analista de negocios o persona de soporte haga ese cambio, sin tener que ajustar el código.

Además, ninguno de estos requisitos requiere herramientas complicadas de IA como RETE e inferencing: la lógica secuencial es la mejor.

Cuestiones relacionadas