Después de un tiempo sin escribir nada por culpa de una rotura de fibras en mi cuadriceps derecho que me ha tenido de baja 2 semanas y media (Tiempo suficiente para empollar las nuevas funcionalidades de NET 2.0 y revisar unos magníficos tutoriales) he empezado a trabajar en casa con las nuevas caracteristicas de ADO.NET y la verdad es que me ha sorprendido bastante con que facilidad se puede crear una capa de acceso a datos y su correspondientes reglas de negocio utilizando para enlazar a la capa de presentación un ObjectDataSource.
En este ejemplo concreto que voy a explicaros a modo de resumen de 2 tutoriales en inglés que os he dejado los enlaces más abajo, como podemos extender las validaciones de datos en nuestra capa de negocios sobre una capa de datos creada con un dataset tipado.
Lo primero es crear nuestra capa de datos con el diseñador de VS 2005 (El primer enlace del final), arrastramos las tablas y creamos los correspondientes TableAdapters, entre ellos para la tabla Products (No voy a comentar nada al respecto sobre como crear la DAL).
Ahora bien, imaginemos que necesitamos validar que el precio del producto que nos introduce el usuario debe ser mayor que 0, y para ello no debemos hacerlo directamente sobre el código que genera VS 2005:
El porque es sencillo: Como es código autogenerado, cuando por algún motivo tenga que autoregenerarse porque hemos modificado algo sobre nuestro dataset tipado, perderemos automáticamente nuestras modificaciones.
Entonces, ¿Como podemos crear nuestras reglas de negocio para validar dichos datos? Pues con el uso de clases parciales. Por ejemplo, en nuestro caso necesitamos extender la clase ProductsDataTable y para ello utilizaremos el evento ColumnChanging para detectar cuando nos modifican una row del datatable:
1: public partial class Northwind
2: {
3: public partial class ProductsDataTable
4: {
5: public override void BeginInit()
6: {
7: this.ColumnChanging += ValidateColumn;
8: }
9:
10: void ValidateColumn(object sender, DataColumnChangeEventArgs e)
11: {
12: if(e.Column.Equals(this.UnitPriceColumn))
13: {
14: if(!Convert.IsDBNull(e.ProposedValue) && (decimal)e.ProposedValue < 0)
15: {
16: throw new ArgumentException(«UnitPrice > 0», «UnitPrice»);
17: }
18: }
19: }
20: }
21: }
Como podeis observar es bastante sencillo validar ciertos datos en la capa de negocio que a nivel de esquema no nos lo permite VS 2005, podemos especificar su tamaño o permitir nulos o no, pero no podemos crear checks como el que hemos realizado en nuestra capa de negocio.
Los 2 tutoriales donde he podido aprender sobre este tema:
Creating a Business Logic Layer
He intentado hacer en este artículo un pequeño resumen de las cosillas que he creido mas interesantes.
Un saludo.