abril 17, 2007

Ejemplo de Aplicación ASP.NET 2.0 en capas con DataSet Tipado

Para el desarrollo de esta aplicación utilizamos Visual Basic .NET con Visual Studio .NET 2005.

Estrucutura del proyecto ASP.NET
- Una carpeta App_Code con:

  • Una clase Area. Que hace uso de los métodos de la Clase del tipo Business Entities representada por un TableAdapter de un DataSet.

  • Una clase DataSet. Contiene un DataSet tipado el cual contiene los TableAdapter que representan a cada uno de los objetos Entitie con sus respectivos métodos de Acceso a Datos.


- La forma Web “Area.aspx” representa a la capa GUI.

Las 3 capas

En una arquitectura en 3 capas tenemos la capa de presentación o GUI, en nuestro ejemplo son los archivos aspx. La capa de Negocio que en nuestro ejemplo la representan nuestras clases Entity ubicados en el DataSet Tipado y para cada objeto entidad existe un TableAdapter con los métodos necesarios para el Acceso a Datos. Y la clase Area que representa como una clase Control que se comunica con las clases Entity y sus metodos de acceso a datos para luego hacer DataBinding con controles en la GUI.

Detalles de la Implementación

Tenemos una tabla llamada Area para la cual queremos implementar una forma de mantenimiento. La pantalla a la que queremos dar funcionalidad con la arquitectura en 3 capas es:



Esta es la estructura de la tabla de la base de datos correspondiente al Area y los datos que regresa el store procedure que estaremos ejecutando.



Implementación del DataSet que contiene a los TableAdapters que representan a nuestros objetos Business Entities.

Algunas de las formas de representar a los Business Entities en la apicación son:
· XML
· DataSet Genericos
· DataSet Tipados
· Componentes Business Entities personaizados
· Componentes Business Entities con comportamiento CRUD

Para nuestro ejemplo utiizaremos el caso de DataSet Tipados. En la siguiente imagen podemos observar como se representa nuestro Business Entiy Area y en la parte baja observamos los métodos de acceso a datos que nos permiten poblar al Businness Entity representado como un DataTable.




Implementación del Objeto Area.

Este objeto es como un objeto control que invoca a los métodos de acceso a datos definidos para cada TableAdapter

Imports Microsoft.VisualBasic

Public Class Area

Public Function ObtenerAreas() As DataSet1.AREADataTable
Dim AreasAdapter As New DataSet1TableAdapters.AREATableAdapter()
Dim Areas As DataSet1.AREADataTable = AreasAdapter.GetData
Return Areas
End Function

End Class

Podemos observar que esta clase crea una instacia del adaptador correspondiente al objeto Entity que deseamos trabajar en este caso: “AreaTableAdapter” luego invocamos su método de acceso a datos llamado GetData que nos regresa un DataTable con cada una de las áreas y que retornamos a la capa GUI para hacer DataBinding con un GridView.

Implementación de la capa de Presentación GUI

En esta capa es en donde vamos a poblar los controles visuales. El GridView se carga durante el evento Load de la página aquí crea una instancia del objeto Control Area y éste expone un método público que obtiene las Area que nos regresa en un objeto DataTable con el cual hacemos DataBinding al GridView.


Partial Class Default2
Inherits System.Web.UI.Page

Dim objArea As New Area

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then

Dim objArea As New Area
Me.GridView1.DataSource = objArea.ObtenerAreas
Me.GridView1.DataBind()

End If
End Sub

'Implementación del Pagineo la Grid
Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging
Me.GridView1.PageIndex = e.NewPageIndex
Me.GridView1.DataSource = objArea.ObtenerAreas()
Me.GridView1.DataBind()
End Sub

'Borrar el registro seleccionado en el Grid
Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting
'Para detectar el segundo postback generado por el ButtonField del tipo Image se verifican sus coordenadas x y.
If (Me.Request("x") Is Nothing) AndAlso (Me.Request("y") Is Nothing) Then

Dim iAffect As Int16
objArea = New Area
iAffect = objArea.DeleteArea(Me.GridView1.Rows(e.RowIndex).Cells.Item(0).Text)
Else
Me.GridView1.DataSource = objArea.ObtenerAreas()
Me.GridView1.DataBind()
End If
End Sub

'Al seleccionar un área se muestra en los controles independientes.
Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged
Me.LabelIdArea.Text = Me.GridView1.Rows(Me.GridView1.SelectedIndex).Cells.Item(0).Text
Me.TextBox2.Text = Me.GridView1.Rows(Me.GridView1.SelectedIndex).Cells.Item(1).Text
Me.TextBox1.Text = Me.GridView1.Rows(Me.GridView1.SelectedIndex).Cells.Item(2).Text
Me.CheckBox1.Text = Me.GridView1.Rows(Me.GridView1.SelectedIndex).Cells.Item(3).Text
End Sub


End Class

Conclusión: Ésta es una de las formas propuestas por Microsoft.

No hay comentarios.: