Donde validar (Capa de datos - Reglas de negocio)

25/09/2004 - 19:53 por El principiante | Informe spam
Como ya he dicho estoy aprendiendo SQL Server (usando Visual Foxpro como
interfaz) especificamente para el desarrollo de un sistema nuevo para
entorno Windows. Hice hace poco una pregunta relacionada pero aquella era
menos especifica.

Resulta que siguiendo normas leidas en los BOL's estoy tratando de indicar
la mayor cantidad de validaciones en la propia base de datos, como
restricciones por ejemplo. Es decir las reglas del negocio en la propia
base de datos.

Como es normal al registrar datos en un form, las validaciones se verifican
al momento de salvar los datos a sql server. El asunto es que en una
determinada pantalla de registro que contiene muchos campos divididos en
varios bloques (pageframes) el cliente me dice que prefiere que al usuario
se le vaya informando sobre datos incorrectos a medida que vaya avanzando de
campo a campo(porque como dije son muchos) y no esperar a que le de a Salvar
pues asi es mas lento el proceso. Ademas aunque no fuese asi, cuando el
insert produce un error de validacion se requiere que en la aplicacion se
posicione en el campo correspondiente a la primera columna con un valor
erroneo.

El asunto es que veo que eso implicaria incluir las mismas validaciones que
ya tengo definidas en la base de datos (sea en restricciones o store
procedures) tendria que repetirlas a nivel de la capa de la interfaz, lo
cual como que no me parece adecuado pues seria como duplicacion de codigo y
no estarian separadas las capas.

Lo que quiero es:
Hay alguna forma de indicar restricciones para una columna especifica de
una tabla de SQL Server de modo que yo pueda detectar desde una aplicacion
cual columna fue que produjo el error y poder posicionarme en la aplicacion
en esta columna ?
De haberlo, hay forma de yo extraer el codigo de validacion desde el
servidor para poder utilizarlo directamente en la aplicacion en la copia
local de datos en edicion, sin tener que repetir esta logica a nivel de la
interfaz ?

Aunque me resultaria mas sencillo que me contaran sus experiencias de como
se suelen manejar estas cosas pues me tienen un poco confundido. Lo que
necesito es alguna idea practica.

Muchas gracias por su valiosa ayuda

Preguntas similare

Leer las respuestas

#6 Leonardo Azpurua
27/09/2004 - 19:32 | Informe spam
"El principiante" escribió en el mensaje
news:%
Gracias por sus opiniones tan interesantes.

De ellas me arriesgo a concluir que en terminos practicos lo que me


conviene
es:

1) Tener en la base de datos las restricciones CHECK, valores por defecto,
claves primarias y similares que le den
una integridad de datos (como dice el compañero de arriba).

2) Tener una capa de validacion de datos llamada desde la interfaz pero NO
que resida en la base de datos (pues no seria necesario). Algo asi como


el
ejemplo de controlar el limite de credito de un cliente al hacer una nueva
factura. Esta capa de datos se auxiliaría de uno que otro procedimiento
almacenado que se defina para agilizar procesos que lo requieran pero
conceptualmente la validacion la haria la aplicacion.

3) Lo que habria que limitar es el acceso a los datos desde fuera de la
aplicacion para evitar que se violen las reglas de negocio que se hayan
definido en la capa intermedia, salvo que sea el administrador de la BD



Hola, Principiante:

No se si será correcto (estoy nuevo en esto de SQL Server, y soy bastante
malo asumiendo "dogmas").

Hasta donde lo entiendo, uno de los objetivos de la separación en capas es
permitir cambiar la implementación de una función sin que este cambio
produzca efectos adicionales en el resto del sistema. Y el objeto de esta
práctica es minimizar el costo del cambio.

Supon que una organización le niega el crédito a los clientes cuyo limite
está excedido, otra a los que tienen una factura vencida y una tercera a
quienes tengan mas de tres facturas pendientes.

Cuando diseñas tu aplicación, puedes tomar en cuenta una cantidad de maneras
de validar la aprobación de un crédito, y permitir que el usuario, en el
programa de configuración parametrice el mecanismo. Esto es lo que
normalmente se hacia en tiempos de los sistemas monolíticos.

La solución que le he dado a este tipo de problemas en mis aplicaciones
"pequeñas" es utilizar Scripts.

Pero si dispones de una herramienta como SQL Server, puedes confiar este
tipo de validaciones a la BD, implementandolas como funciones de usuario o
como procedimientos almacenados (prefiero éstos). La ventaja de este método
es que permites que el cliente reconfigure sus políticas mediante un simple
cambio en la definición de la UDF o del SP: te ahorras todos los
inconvenientes de reconstruir y redistribuir tu aplicación.

Hay "pequeñas validaciones" (que el cliente exista, que existan los
productos, que la condición sea valida) que deben ser ejecutadas desde la
forma. La forma, por lo general, es un pequeño componente de una aplicación
cuyas entidades estan implementadas como clases. La responsabilidad de la
forma es pedirle a cada una de las clases que determine la validez de cada
entrada del usuario. De esta manera mantienes a la forma ignorante (e
independiente) de los detalles de implementación. Como norma general,
considero un error de diseño cualquier operacion de acceso a una BD que
aparezca en el código de un formulario.

Por lo general es buena idea reducir la cantidad de accesos a la BD. En
todas las aplicaciones hay cantidad de tablas pequeñas y relativamente
estáticas (cosas como definiciones de impuestos, descuentos, almacenes,
condiciones de credito): es bueno que esas tablas sean cargadas en algun
tipo de colección especializada, que asumirá la responsabilidad de validar
las entradas y proveer a sus clientes de la información requerida.

Salud!

Leonardo
mvp vb
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida