Facilitando la vida del desarrollador con Visual Studio 2005 Daniel A. Seara .
-
Upload
fabian-ureno -
Category
Documents
-
view
6 -
download
0
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í