diseño lógica negocio y DAL

08/05/2007 - 10:56 por Alhambra Eidos Kiquenet | Informe spam
Hola a todos,

tengo en una clase de Lógica de negocio algo así:

Parte de un método
using (ValoracionesDal dal = new ValoracionesDal())
{
string condiciones =
dal.ObtenerCondicionesTareasNoFinalizadasDeCriterios(criterios);
return dal.ObtenerValoracion(idvaloracion, condiciones);
}


Y este método...
private string ObtenerCondicionesTareasNoFinalizadasDeCriterios(
CriteriosListadoTareasNoFinalizadas criterios)
{
string sqlCondiciones = string.Empty;

using (TareasDal dal = new TareasDal())
{
if (criterios.OpcionTipoInmueble)
sqlCondiciones =
dal.CondicionParaCriterioTipoInmueble(criterios.Tipoval);
else if (criterios.OpcionTasador)
sqlCondiciones =
dal.CondicionParaCriterioTasador(criterios.Clavetasa);
else if (criterios.OpcionZona)
sqlCondiciones =
dal.CondicionParaCriterioZona(criterios.Zona);
else if (criterios.OpcionNexped)
sqlCondiciones =
dal.CondicionParaCriterioNexped(criterios.Nexpedval);
else if (criterios.OpcionSolicitante)
sqlCondiciones =
dal.CondicionParaCriterioSolicitante(criterios.Solicitante);
else if (criterios.OpcionDireccion)
sqlCondiciones =
dal.CondicionParaCriterioDireccion(criterios.Direccion);
}
return sqlCondiciones;
}


Quería saber cuál sería la forma más adecuada de implementar casos así.

Digamos que se quiere ejecutar una consulta que va a depender de ciertas
condiciones. Se pueden considerar estas condiciones como parte de la lógica
de negocio, y por tanto el tratamiento debería estar en la capa BL.

Pero a su vez, las condiciones al fin y al cabo van a expresarse en una
condición SQL por tanto generará código SQL en la capa DAL.

Qué plantemientos habría al respecto sobre este tema, qué formas de
implementación podría optar ?

Saludos y gracias de antemano.


http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.net

Preguntas similare

Leer las respuestas

#1 Alfredo Novoa
08/05/2007 - 13:20 | Informe spam
On Tue, 8 May 2007 01:56:01 -0700, Alhambra Eidos Kiquenet
wrote:

Quería saber cuál sería la forma más adecuada de implementar casos así.



Hacerlo con el SGBD.

Digamos que se quiere ejecutar una consulta que va a depender de ciertas
condiciones.



Si guardas las condiciones en la base de datos luego podrás sacar lo
que quieras con una simple consulta.

Se pueden considerar estas condiciones como parte de la lógica
de negocio, y por tanto el tratamiento debería estar en la capa BL.



Es decir que esa lógica la debería de asegurar el SGBD.


Saludos
Respuesta Responder a este mensaje
#2 Alhambra Eidos Kiquenet
08/05/2007 - 14:10 | Informe spam
Y en cuanto a implementación en que queda esto ? tener por cada condición
posible una consulta o procedimiento almacenado ??

Algún ejemplo práctico ??

Saludos y gracias señor.
Respuesta Responder a este mensaje
#3 Daniel A. Calvin
08/05/2007 - 14:50 | Informe spam
Hola Alhambra Eidos Kiquenet

El tema que planteas tiene distintas respuestas. Todo depende del tipo de
arquitectura que implementes y del tipo de diseño de la aplicación. ( Modelo
al vez sea mas correcto )

Si vamos a partir de la base de que estas modelando un dominio determinado y
esos criterios representan criterios o conceptos dentro e ese dominio,
entonces forman parte de la capa de negocio.

Eso no quiere decir que no puedas tener store procedures en una base de
datos o consultas pre armadas.

El tema es asi, para que se busca trabajar con un modelo que represente al
dominio del problema?
Cuando se opta por este tipo de solución todos lso conceptos que intervienen
en el problema estan representados por algun artefacto software.
Ese artefactom que representa un concepto de negocio, implementa por dentro
cierta lógica que manttiene oculta la solucuón a quien consume el artefacto.
Esto permite que hacer crecer una aplicación escrita bajo estos términos sea
mucho mas simpel de mantener y escalar.

Por debajo esos artefactos ejecurán consultas en una base dedatos o
recurrirán a otros artefactos del dominio, pero eso es anecdotico. Lo
importante es uq elogras un alto nivel de abstarcción.

El programador no sabe que si el campo x de la tabla z vale 5 y el campo u
de la tabla o vale 8, pero siempre y cuando exista un registro relacionado en
la tabla m etc, etc.
Solo conoce el concepto, obtener todas las cuentas ontables con saldo no
habitual, por ejemeplo.
La clase impelmente eso en algún metodo, por supuesto recurrirá a la DAL
para obtener el resultado, pero tu aplicación se arma recurriendo esos
conceptos del dominio o negocio.

Este tipo de modelado y posterior programación te independizan mucho de la
estructura de datos, lo cua no quiere decir que no aproveches su potencia,
solo que logres abstarerte al memoneto de resolver la funcionalidad de tu
aplicación.

Al hacer estas cosas logras alta re usabilidad de código, ya que siempre
invocas metodos o instancias clases que representan algo del mundo real del
problema resuelto, por ejmeplo plan de cuentas, asiento contable, etc, etc.

Si te pegas mucho a las consultas de la base y termionas invocando esto
desde tu capa de negcoios sin que represente un concepto definido claramente
en el dominio, empezas con los problemas tradicionales, dificultad de
mantener una aplicación a lo largo del tiempo, dificil de entender por otro
programador distinto al que la construyo, crecimeinto complejo..., etc, etc.

Si tenes ganas pegale una mirada a cooperator, te generará todos los
artefactos de negocio, te armará una DAL tipada y que implemente metodos de
busqueda y actualización. Te permitirá generar automaticamente busquedas
aprovechando el motor de la base de datos si definiste bien indices y foreign
keys, adicionalemente te facilita el agregado de metodos de busqueda en la
DAL, definiendo vos los querys a la base de datos.
Una vez que haces eso es muy simple contruir una capa de negocios que
explote las capacidades de la DAL. Logras facilmente trabajar con conceptos
válido en el dominio y la implementación de los criterios, que finalmente se
hacen mediante el motor de la base de datos, se ven desde la capa de negoio
como artefactos del dominio.

Si no fui muy claro, el tema es largo, preguntame y te cuento mas sobre el
porque de cada cosa, que ventajas tendrás si mantienes todo en la capa de
negocio y como explotar una DAL, indeoenduientemente de escribirla a mano o
usar algún producto que te ayude, de forma eficiente.

Saludos

Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional

"Alhambra Eidos Kiquenet" wrote:

Hola a todos,

tengo en una clase de Lógica de negocio algo así:

Parte de un método
using (ValoracionesDal dal = new ValoracionesDal())
{
string condiciones =
dal.ObtenerCondicionesTareasNoFinalizadasDeCriterios(criterios);
return dal.ObtenerValoracion(idvaloracion, condiciones);
}


Y este método...
private string ObtenerCondicionesTareasNoFinalizadasDeCriterios(
CriteriosListadoTareasNoFinalizadas criterios)
{
string sqlCondiciones = string.Empty;

using (TareasDal dal = new TareasDal())
{
if (criterios.OpcionTipoInmueble)
sqlCondiciones =
dal.CondicionParaCriterioTipoInmueble(criterios.Tipoval);
else if (criterios.OpcionTasador)
sqlCondiciones =
dal.CondicionParaCriterioTasador(criterios.Clavetasa);
else if (criterios.OpcionZona)
sqlCondiciones =
dal.CondicionParaCriterioZona(criterios.Zona);
else if (criterios.OpcionNexped)
sqlCondiciones =
dal.CondicionParaCriterioNexped(criterios.Nexpedval);
else if (criterios.OpcionSolicitante)
sqlCondiciones =
dal.CondicionParaCriterioSolicitante(criterios.Solicitante);
else if (criterios.OpcionDireccion)
sqlCondiciones =
dal.CondicionParaCriterioDireccion(criterios.Direccion);
}
return sqlCondiciones;
}


Quería saber cuál sería la forma más adecuada de implementar casos así.

Digamos que se quiere ejecutar una consulta que va a depender de ciertas
condiciones. Se pueden considerar estas condiciones como parte de la lógica
de negocio, y por tanto el tratamiento debería estar en la capa BL.

Pero a su vez, las condiciones al fin y al cabo van a expresarse en una
condición SQL por tanto generará código SQL en la capa DAL.

Qué plantemientos habría al respecto sobre este tema, qué formas de
implementación podría optar ?

Saludos y gracias de antemano.


http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.net

Respuesta Responder a este mensaje
#4 Alfredo Novoa
08/05/2007 - 15:47 | Informe spam
On Tue, 8 May 2007 05:10:29 -0700, Alhambra Eidos Kiquenet
wrote:

Y en cuanto a implementación en que queda esto ? tener por cada condición
posible una consulta o procedimiento almacenado ??



No, un dato en una tabla.

Algún ejemplo práctico ??



Pon tu algún ejemplo de lo que quieres.


Saludos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida