Acceso a datos orm o ado.net
Cualquier aplicación que se precie debe a la hora de la planificación dedicar tiempo a su arquitectura. Aquí deberemos de tener en cuenta los patrones de diseño que más convengan a nuestro futuro sistema, así como tengamos más conocimiento y experiencia con él. En esta entrada escribiremos sobre la data access layer y en concreto sobre dos posibilidades para construir el acceso a datos. Por un lado usar daab, la librería de Microsoft de acceso a datos optimizada y que permite ahorrarnos lineas de código, y por el otro un orm, no de los más conocidos pero con sencilla implementación, subsonic. Para ambos compararemos su configuración y ejemplo de código para generar consultas, así tener idea del tiempo y número de lineas necesarias para su uso. Empezamos con daab.Si no las tienes instaladas lo primero será conseguirlas desde enterprise library, podemos usar la utilidad de configuración enterprise library configuration, esto basicamente nos crea un fichero .config con la cadena de conexión a la base de datos y una entrada en web.config para incluir este primer archivo. Una vez en nuestro proyecto, dado que sólo vamos a usar daab, bastará con referenciar en nuestro directorio bin las tres librerías siguientes, EnterpriseLibrary.Common.dll, EnterpriseLibrary.Configuration.dll y EnterpriseLibrary.Data.dll. Veamos entonces un ejemplo de código para actualizar una tabla usando un procedimiento almacenado:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ... If Page.IsPostBack Then Page.Validate() If Page.IsValid Then Dim dbpb As Database = DatabaseFactory.CreateDatabase("suscripciones") Dim dbCommandWrapper As DBCommandWrapper = dbpb.GetStoredProcCommandWrapper("Subscription_Add") DBCommandWrapper.AddInParameter("@Pub_Id", SqlDbType.Int, pubid) dbCommandWrapper.AddInParameter("@Email", SqlDbType.VarChar, stremail) dbpb.ExecuteNonQuery(dbCommandWrapper) End If End If End Sub
Con estas pocas lineas tendríamos actualizada la tabla con los parámetros pasados al procedimiento almacenado, en particular se reduce el código para crear y pasar los valores de los parámetros.
Para el caso de Subsonic .net orm deberemos tener el código, en este caso la versión 3.0.4, desempaquetarlo y empezar con la configuración. Ya que vamos a utilizar el patrón más parecido y sencillo usaremos Active record, empezamos con introducir la cadena de conexión de nuestro web.config, el nombre de la base de datos y el espacio de nombres que queremos para nuestro código, en el archivo de configuración de T4 «Settings.ttinclude«. Ahora por un lado añadimos la referencia a la librería «SubSonic.Core.dll» por comodidad creamos un directorio «datalayer» donde copiaremos los templates de Subsonic que nos generaran nuestra capa de acceso a datos. Una vez que tenemos generado el código veamos como ejecutaríamos el mismo procedimiento almacenado:
Public Class addsuscripcion Inherits System.Web.UI.Page Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim sp as Subsonic.StroreProcedure = New SPs.Subscription_Add(Pub_Id, Email) sp.Execute() End Sub End Class
Estas pocas lineas serían las únicas necesarias para ejecutar el procedimiento almacenado. Aparte del código que tendríamos que escribir habría que tener en cuenta el tiempo que necesitaríamos para tener la misma soltura que con ado.net/daab. En cuanto a la eficiencia de ejecución, si tienes una versión Team System, Premium o superior de Visual Studio, puedes usar Visual Studio Performance Wizard para comparar cual de los dos códigos utiliza menos recursos para ejecutar las consultas.