Facilitando la vida del desarrollador con Visual Studio 2005 Daniel A. Seara .

Post on 03-Feb-2015

2 views 0 download

Transcript of Facilitando la vida del desarrollador con Visual Studio 2005 Daniel A. Seara .

Facilitando la vida del desarrollador con Visual Studio

2005

Daniel A. Seara

www.sqlu.com

Migrando desde SQL Server© 2000

• A partir de una base previa– Es posible obtener un respaldo de una base

de SQL 2000 en SQL 2005– Y también se puede adjuntar una base de la

versión anterior

• Es recomendable, pero no imprescindible, actualizar la versión de la base.

USE [master]

GO

EXEC dbo.sp_dbcmptlevel @dbname=N'PhoneServices', @new_cmptlevel=90

GO

Así era en 2000

Schemas

• Permiten agrupar información relacionada

• De esa manera, se mantiene mejor orden

• … y se puede administrar mejor la seguridad

Creando Esquemas

USE [PhoneServices]GOCREATE SCHEMA [Geography]GOCREATE SCHEMA [Sales]GOCREATE SCHEMA [Operations]GO

Moviendo objetos a los esquemas

ALTER SCHEMA [Sales] TRANSFER dbo.CustomerGOALTER SCHEMA [Sales] TRANSFER dbo.PayTypeGOALTER SCHEMA [Sales] TRANSFER dbo.PayTypeByClientGO

Y así queda

Cosas del Sitio Web

• Presentación– Páginas maestras– Hoja de estilos– “Skin”

Páginas maestras

• Acomodar las cosas dentro de tablas

• No, repito NO cambiar estilos en tiempo de diseño– Usar una hoja de estilos

• Veremos luego, esto ayuda con los temas

Hoja de estilos

• Nunca, o sea NUNCA usar tamaños fijos– El usuario puede necesitar cambiar el tamaño

de las fuentes

• Definir una clase para cada forma distinta de mostrar las cosas– Es fácil así reasignar la forma de

presentación

“Skin”

• Define estándar de presentación de cualquier control– Facilita mantener normalizado el sitio– Es posible asignar nombres (SkinID) para

definir distintas formas para el mismo control

<asp:TextBox runat="Server" CssClass="NormalTextBox" /><asp:TextBox runat="Server" CssClass="NumericTextBox" SkinID="Numbers" />

.NormalTextBox{

background-color: goldenrod;}.NumericTextBox{

background-color: goldenrod;text-align: right;

}

Llevando los datos a las páginas

• SqlDataSource– Es fácil

• ¿Es fácil?

– Súper RAD• ¿En serio es tan rápido?

– Se arma solito

Usando mis objetos de negocio

• Encapsulan la funcionalidad

• Permiten mayor control en lo que hay que hacer, cómo, cuándo y dónde

• Implican mayor trabajo “de base”.

Componentes base

• Como siempre un servicio de datos

Reglas “Base”

Tranquilos. Veremos algunos detalles luego

Creando las reglas de “este” negocio

• Agregar una clase

• Heredar de baseEntity

• Implementar los métodos obligatorios– AssignTableName

• Retorna el nombre de la tabla a manipular

– Application

Dim mApp As Application Protected Overrides Property Application() As _ Desarrolladoras.Reglas.baseApplication Get If mApp Is Nothing Then mApp = New Application End If Return mApp End Get Set(ByVal value As _ Desarrolladoras.Reglas.baseApplication) mApp = value End Set End Property

Cada objeto expone sus valores como propiedades

• Los valores obtenidos desde la base para una entidad determianda están contenidos en un array de tipo Object– Values()

• Se exponen como propiedades independientes haciendo la conversión necesaria– Idea “robada” del DataTable de los dataset

generados automáticamente

<ComponentModel.Bindable(True, ComponentModel.BindingDirection.TwoWay)> _ Public Property LName() As String Get Try Return CType(MyBase.Field("LName"), String) Catch e As System.InvalidCastException Return String.Empty End Try End Get Set(ByVal value As String) MyBase.Field("LName") = value If Me.Status = Desarrolladoras.Reglas.EntityStatus.NotReaded _ OrElse _ Me.Status = Desarrolladoras.Reglas.EntityStatus.Unchanged Then _ Me.Status = Desarrolladoras.Reglas.EntityStatus.Modified End Set End Property

¿Y como agregar este código?

• Snippet Editor– No “viene” con VB pero se consigue fácil (y gratis)

• http://msdn.microsoft.com/vbasic/downloads/tools/snippeteditor/

– Permite agregar snippets personalizados• O modificar los existentes

– Se pueden crear a cualquier nivel• Clase• Miembro• Parte de un miembro

Obtener múltiples registros

• La regla de negocio puede exponer directamente un DataTable– Con las columnas resultantes de ejecutar el

Procedimiento Almacenado– La nueva implementación de ADO vincula un

DataTable a sus propios DataAdapters• Pero pueden llenarse desde un componente de

datos

Obtener múltiples registros

• ¿Y puedo tener un Dataset con todas las tablas y consultas de la base?– Si

• Pero no llenarlo

– Permite tener todos los objetos de tipo DataTable definidos en un solo lugar

• También se pueden tener en DataSets que agrupen por funcionalidad

• O las tablas separadas

Exponer la vinculación

• Los orígenes de datos de ASP.Net 2.0 están pensados para múltiples registros– En contra de la regla de los ravioles

• Se debe exponer el objeto como si fuese una lista de instancias de sí mismo

Public Function [Select]() As System.Collections.Generic.List(Of Customer) Dim l As New System.Collections.Generic.List(Of Customer) l.Add(Me) Return l End Function

Base de un ABM

• El usuario solicita– Ver los registros presentes

• Editar• Agregar• Eliminar

Implementación

Multiview

View1

GridView

View2

FormView

ObjectDataSource1ObjectDataSource1

ObjectDataSource2ObjectDataSource2

View1

• Datasource que obtiene el DataTable con los registros

• GridView con las columnas que interesan– Un template con iconos para modificar y

eliminar

View2

• FormView– En modo Edit para la edición– En modo ReadOnly para confirmar

eliminación

• DataSource que obtiene el método Select – Un List con un solo elemento– Codificar el evento ObjectCreating para

asignar el objeto específico a editar Protected Sub ObjectDataSource2_ObjectCreating( _ ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.ObjectDataSourceEventArgs) _ Handles ObjectDataSource2.ObjectCreating e.ObjectInstance = myEnt End Sub

Actualización

• Codifica el evento ItemUpdating del FormView– El eventArgs recibe los nuevos valores ingresados

por el usuario, por orden de posición de los campos• Se puede usar un bucle para actualizar el objeto

• Persistir el objeto en edición entre llamadas– En Session– En ViewState– Page_Load– Page_PreRender

¿Preguntas?

• Espero que ahora puedan descansar así