viernes, 22 de enero de 2010

Programación en 3 capas - Parte I

Introducción

El código adjunto ha sido simplificado al máximo para lograr una mejor compresión del tema planteado. Supongo que hechareis en falta muchas cosas y se os ocurrirán muchas mejoras pero espero que comprendais que, para que el artículo no sea demasiado denso, se hayan omitido intencionadamente.
Estaré encantado de leer vuestros comentarios.

(El ejemplo accede a la base de datos pubs de SQL.)

Arquitectura de 3 capas

Sin entrar en las ventajas o desventajas de este tipo de arquitectura (hay opiniones para todos los gustos) voy a mostrar un modelo sencillo que espero sirva para clarificar a los neofitos (entre los que me cuento) de que va todo esto. Si además alguien lo puede reutilizar, mejor que mejor.
¿Por qué elegí este modelo? Buena pregunta. Cuando empecé en esto de .net y la POO pensé lo bonito que sería abstraer las entidades de lógica empresarial (factura, cliente, cuenta contable, etc) para que se tratasen de forma sencilla durante el desarrollo de la aplicación (intellysense) y fuesen componentes que pudiese arrastrar a mis formularios para enlazarlos (binding) a los controles necesarios. Tambien quería una capa de datos que pudiese extender a distintos servidores de DB. Y mas cosas. Veamos como.

Capa de Datos

Es la que se encargará de 'llenar' los dataset de las entidades de negocio desde la base de datos y, en sentido contrario, 'grabar' los cambios realizados. Para ello necesitaremos un componente por cada entidad de negocio con los métodos 'Leer' y 'Actualizar', que hacen trabajar al DataAdapter correspondiente.

Private Sub Leer(ByVal ds As DataSet)
      Me.SqlDataAdapter1.Fill(ds) 
End Sub
Private Sub Actualizar(ByVal ds As DataSet)
      Me.SqlDataAdapter1.Update(ds)
End Sub 
 
La clase 'ConectionSolver' se encargará de recuperar la cadena de conexión allí donde la tengamos guardada. Cada uno que elija lo que más le convenga. En el ejemplo está como un literal por simplificación.

Capa de Negocio

Las entidades de Negocio heredan de un dataset tipado y se les añaden los metodos 'Cargar' y 'Guardar'

Dim Dal As DCE.Datos.DalEmployee 
Public Sub Cargar() 
 If Dal Is Nothing Then Dal = New DCE.Datos.DalEmployee
 Dal.Leer(Me)
End Sub 
Public Sub Guardar()
 If Dal Is Nothing Then Dal = New DCE.Datos.DalEmployee 
 Dal.Actualizar(Me)
End Sub

Capa de presentación

Agregar las entidades de negocio a la barra de herramientas y arrastrarlas al formulario donde vayan a ser 'bindeadas'. Muy sencillo, no?
En la siguiente entrega complicaremos un poco la cosa viendo de que manera podemos implementar transacciones en las que intervengan varias entidades de negocio.

No hay comentarios:

Publicar un comentario