mejoras del.net framework 2.0 haaron gonzález, mcp, mvp, mcad plexit consulting...

23
Mejoras del .NET Framework 2.0 Haaron González, MCP, MVP, MCAD Haaron González, MCP, MVP, MCAD PlexIT Consulting PlexIT Consulting [email protected] [email protected]

Upload: anunciacion-duque

Post on 03-Jan-2015

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Mejoras del .NET Framework 2.0Mejoras del .NET Framework 2.0

Haaron González, MCP, MVP, MCADHaaron González, MCP, MVP, MCADPlexIT ConsultingPlexIT [email protected]@plexit.com.mx

Page 2: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

ObjetivoObjetivo

Dar una revisión general de las Dar una revisión general de las nuevas características del .NET nuevas características del .NET Framework 2.0Framework 2.0

Nuevas características de los Nuevas características de los lenguajes.lenguajes.

Page 3: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

AgendaAgendaIntroducciónIntroducciónNuevas características Nuevas características

del lenguajedel lenguajeClases parcialesClases parcialesTipos “null”Tipos “null”GenericsGenerics

ResumenResumenPreguntas y respuestasPreguntas y respuestas

Page 4: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

IntroducciónIntroducción

¿Qué es .NET ?¿Qué es .NET ?

““La tecnología que permite La tecnología que permite integrar personas, integrar personas,

dispositivos e información en dispositivos e información en cualquier lugar y en cualquier cualquier lugar y en cualquier

momento”momento”

Page 5: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

IntroducciónIntroducción

.NET Momentum.NET Momentum Lo usa más del 60% de Fortune 100Lo usa más del 60% de Fortune 100 Más de 70M de sistemas con el .NET Más de 70M de sistemas con el .NET

FrameworkFramework Más de 2.5M de desarrolladores .NET Más de 2.5M de desarrolladores .NET

en el mundoen el mundo Foco en productividad, excelencia Foco en productividad, excelencia

operacional y nuevas experienciasoperacional y nuevas experienciasWin32Win32 vs. vs. .NET.NET

Page 6: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas característicasNuevas características Mejoras al modelo de seguridadMejoras al modelo de seguridad

SecureStringsSecureStringsMejor encriptaciónMejor encriptaciónBasado en rolesBasado en roles

Mejoras a los lenguajesMejoras a los lenguajesClases parcialesClases parcialesTipos nulos Tipos nulos GenericsGenerics

Entre otras más … Entre otras más …

Page 7: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas características del lenguajeNuevas características del lenguaje

Encripción Web.ConfigEncripción Web.ConfigNuevas características del lenguajeNuevas características del lenguaje

Encripción Web.ConfigEncripción Web.Configvoid ButtonEncryptClick(object sender, void ButtonEncryptClick(object sender, EventArgsEventArgs e) e){{

ConfigurationConfiguration config = config = WebWebConfigurationConfiguration.GetWebConfiguration(Request.ApplicationPath);.GetWebConfiguration(Request.ApplicationPath);

ConfigurationSectionConfigurationSection section = section = config.Sections["connectionStrings"];config.Sections["connectionStrings"];

// Encryption// Encryptionsection.ProtectSection("DataProtectionConfigurationProvider");section.ProtectSection("DataProtectionConfigurationProvider");config.Update();config.Update();

}}

void ButtonDecryptClick(object sender, void ButtonDecryptClick(object sender, EventArgsEventArgs e) e){{

ConfigurationConfiguration config = config = WebWebConfigurationConfiguration.GetWebConfiguration(Request.ApplicationPath);.GetWebConfiguration(Request.ApplicationPath);

ConfigurationSectionConfigurationSection section = section = config.Sections["connectionStrings"];config.Sections["connectionStrings"];

// Decryption// Decryptionsection.UnProtectSection();section.UnProtectSection();config.Update();config.Update();

}}

Page 8: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas características del lenguajeNuevas características del lenguaje

Clases ParcialesClases ParcialesNuevas características del lenguajeNuevas características del lenguaje

Clases ParcialesClases Parciales Una clase puede estar construida de Una clase puede estar construida de

varios fragmentosvarios fragmentos Cada fragmento lo conocemos como una Cada fragmento lo conocemos como una

Clase ParcialClase Parcial El compilador se encarga de poner los El compilador se encarga de poner los

fragmentos en una sola clasefragmentos en una sola clase

public partial class BankCustomer{ public string LastName;}

public partial class BankCustomer{ public string LastName;}

public partial class BankCustomer{ public override string ToString() { return LastName + “,” + FirstName; }}

public partial class BankCustomer{ public override string ToString() { return LastName + “,” + FirstName; }}

public partial class BankCustomer{ public string FirstName;}

public partial class BankCustomer{ public string FirstName;} public class BankCustomer

{ public string FirstName; public string LastName;

public override string ToString() { return LastName + “,” + FirstName; }}

public class BankCustomer{ public string FirstName; public string LastName;

public override string ToString() { return LastName + “,” + FirstName; }}

====

Page 9: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas características del Nuevas características del lenguajelenguaje

Clases ParcialesClases Parciales

Nuevas características del Nuevas características del lenguajelenguaje

Clases ParcialesClases Parciales Desarrollado en mente para darle Desarrollado en mente para darle más poder a las herramientas más poder a las herramientas generadoras de códigogeneradoras de código CodeSmithCodeSmith Visual Studio NET 2005Visual Studio NET 2005

Ejemplo:Ejemplo:

// Form1.Designer.cspartial class Form1{ . . // VS Forms designer code! .}

// Form1.Designer.cspartial class Form1{ . . // VS Forms designer code! .}

// Form1.cspublic partial class Form1 : Form{ . . // our code! .}

// Form1.cspublic partial class Form1 : Form{ . . // our code! .}

Page 10: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas características del Nuevas características del lenguajelenguaje

Clases ParcialesClases Parciales

Nuevas características del Nuevas características del lenguajelenguaje

Clases ParcialesClases Parciales Esta diseñado para el uso de Esta diseñado para el uso de herramientas de generación de herramientas de generación de código.código.

No es necesario que nos No es necesario que nos esforcemos a usarlas – están esforcemos a usarlas – están enfocadas para un fin distinto al enfocadas para un fin distinto al “uso humano.“uso humano.

Page 11: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas características del Nuevas características del lenguajelenguaje

Tipos de dato Tipos de dato nullnull

Nuevas características del Nuevas características del lenguajelenguaje

Tipos de dato Tipos de dato nullnull Las variables nulas contienen ningún valor Las variables nulas contienen ningún valor … contienen “null”… contienen “null”

A la fecha no existía manera de asignar un A la fecha no existía manera de asignar un valor “null” a un parámetro en bases de valor “null” a un parámetro en bases de datos, normalmente se omite por default.datos, normalmente se omite por default.

int dbValue;...if ( dbReader.IsDBNull(dbReader.GetOrdinal(“FieldName”)) ) dbValue = ???; else dbValue = System.Convert.ToInt32(dbReader[“FieldName”]);

int dbValue;...if ( dbReader.IsDBNull(dbReader.GetOrdinal(“FieldName”)) ) dbValue = ???; else dbValue = System.Convert.ToInt32(dbReader[“FieldName”]);

Page 12: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Las variables nulas permiten diferenciar a un Las variables nulas permiten diferenciar a un valor discreto y un valor nulo.valor discreto y un valor nulo.

Nuevas características del Nuevas características del lenguajelenguaje

Tipos de dato Tipos de dato nullnull

Nuevas características del Nuevas características del lenguajelenguaje

Tipos de dato Tipos de dato nullnullint? dbValue;...if ( dbReader.IsDBNull(dbReader.GetOrdinal(“FieldName”)) ) dbValue = null; // field is null — so store null!else dbValue = System.Convert.ToInt32(dbReader[“FieldName”]);

.

.

.

int? dbValue;...if ( dbReader.IsDBNull(dbReader.GetOrdinal(“FieldName”)) ) dbValue = null; // field is null — so store null!else dbValue = System.Convert.ToInt32(dbReader[“FieldName”]);

.

.

.

sum += dbValue ?? 0; // sum in the value (or 0 if null)sum += dbValue ?? 0; // sum in the value (or 0 if null)

if (dbValue == null) << no value in DB >>else << value in DB to process >>...

if (dbValue == null) << no value in DB >>else << value in DB to process >>...

Page 13: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Otras soluciones:Otras soluciones:Usar un tipo de dato alternativoUsar un tipo de dato alternativoNo usar nulls en la base de No usar nulls en la base de

datos datos

Nuevas características del Nuevas características del lenguajelenguaje

Tipos de dato Tipos de dato nullnull

Nuevas características del Nuevas características del lenguajelenguaje

Tipos de dato Tipos de dato nullnull

Page 14: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas características del Nuevas características del lenguajelenguaje

GenericsGenerics

Nuevas características del Nuevas características del lenguajelenguaje

GenericsGenerics Nos permite *definir* objetos Nos permite *definir* objetos genéricos pero para *usarlos* de una genéricos pero para *usarlos* de una manera específica.manera específica. ColeccionesColecciones MétodosMétodos ParámetrosParámetros Y más…Y más…

List<BankCustomer> customers;customers = new List<BankCustomer>();

customers.Add( new BankCustomer(...) );...

List<BankCustomer> customers;customers = new List<BankCustomer>();

customers.Add( new BankCustomer(...) );...

Page 15: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas características del Nuevas características del lenguajelenguaje

GenericsGenerics

Nuevas características del Nuevas características del lenguajelenguaje

GenericsGenerics Nos permite tener:Nos permite tener: Type-safetyType-safety EficienciaEficiencia ReusabilidadReusabilidad Métodos y listas genéricasMétodos y listas genéricas

Cada objeto almacenado en una lista Cada objeto almacenado en una lista es almacenado como un objeto y es almacenado como un objeto y requiere un cast (TipoDeDato) que requiere un cast (TipoDeDato) que nos diga como va.nos diga como va. Boxing - UnBoxingBoxing - UnBoxing

Page 16: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas características del Nuevas características del lenguajelenguaje

Generics - Generics - constraintsconstraints

Nuevas características del Nuevas características del lenguajelenguaje

Generics - Generics - constraintsconstraints

Podemos especificar restricciones Podemos especificar restricciones en los tipos genéricosen los tipos genéricos

Nos asegura que la entidad Nos asegura que la entidad genérica esta usada genérica esta usada apropiadamente apropiadamente Una forma sencilla de chequeo Una forma sencilla de chequeo

estáticoestáticopublic class SortableList<T> : List<T> where T : IComparable{ }public class SortableList<T> : List<T> where T : IComparable{ }

SortableList<BankCustomer> customers;customers = new SortableList<BankCustomer>();

customers.Add( new BankCustomer(“jim”, “bag”);...customers.Sort();

SortableList<BankCustomer> customers;customers = new SortableList<BankCustomer>();

customers.Add( new BankCustomer(“jim”, “bag”);...customers.Sort();

Page 17: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas características del Nuevas características del lenguajelenguaje

Generics - Generics - reusabilidadreusabilidad

Nuevas características del Nuevas características del lenguajelenguaje

Generics - Generics - reusabilidadreusabilidad

También nos permite escribir código También nos permite escribir código genérico, reusable…genérico, reusable…

Un ejemplo de una conexión a base Un ejemplo de una conexión a base de datos:de datos:

// // Capa de negocio//DataAccess data; DataSet ds1, ds2;

// access a MS Access database...data = new MSAccessDB(“connection string”);ds1 = data.Retrieve(“Select * ...”);

// now access a SQL Server database...data = new SqlServerDB(“connection string”);ds1 = data.Retrieve(“Select * ...”);

// // Capa de negocio//DataAccess data; DataSet ds1, ds2;

// access a MS Access database...data = new MSAccessDB(“connection string”);ds1 = data.Retrieve(“Select * ...”);

// now access a SQL Server database...data = new SqlServerDB(“connection string”);ds1 = data.Retrieve(“Select * ...”);

DataAccess

SqlServerDB MSAccessDB

Page 18: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas características del lenguajeNuevas características del lenguaje

Generics – acceso a datosGenerics – acceso a datosNuevas características del lenguajeNuevas características del lenguaje

Generics – acceso a datosGenerics – acceso a datos La premisa es:La premisa es:

Parametrizar métodos de acceso a datos Parametrizar métodos de acceso a datos usando Genericsusando Generics

public class DataAccess{ // a generic method to retrieve records and return as a DataSet... public DataSet Retrieve<T1, T2, T3>(string sConnect, string sql)

where T1 : System.Data.IDbConnection, new() where T2 : System.Data.IDbCommand, new() where T3 : System.Data.IDbDataAdapter, new() { T1 conn = default(T1); // initialize to null for finally block T2 cmd; T3 adapter; DataSet ds; . . .

public class DataAccess{ // a generic method to retrieve records and return as a DataSet... public DataSet Retrieve<T1, T2, T3>(string sConnect, string sql)

where T1 : System.Data.IDbConnection, new() where T2 : System.Data.IDbCommand, new() where T3 : System.Data.IDbDataAdapter, new() { T1 conn = default(T1); // initialize to null for finally block T2 cmd; T3 adapter; DataSet ds; . . .

Page 19: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

// cont’d

try { conn = new T1(); // create connection object conn.ConnectionString = sConnect;

cmd = new T2(); // create command object cmd.Connection = conn; cmd.CommandText = sql;

adapter = new T3(); // create data adapter object adapter.SelectCommand = cmd;

conn.Open(); adapter.Fill(ds); } catch (Exception ex) { throw ex; } finally { try { conn.Close(); } catch { } }

return ds;}

// cont’d

try { conn = new T1(); // create connection object conn.ConnectionString = sConnect;

cmd = new T2(); // create command object cmd.Connection = conn; cmd.CommandText = sql;

adapter = new T3(); // create data adapter object adapter.SelectCommand = cmd;

conn.Open(); adapter.Fill(ds); } catch (Exception ex) { throw ex; } finally { try { conn.Close(); } catch { } }

return ds;}

Continuación…Continuación…

Page 20: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas características del lenguajeNuevas características del lenguaje

Generics – acceso a datosGenerics – acceso a datosNuevas características del lenguajeNuevas características del lenguaje

Generics – acceso a datosGenerics – acceso a datos Para mandar a llamar este método, solo Para mandar a llamar este método, solo

pasamos los tipos que se apegan a las pasamos los tipos que se apegan a las restricciones:restricciones:

using MSA = System.Data.OleDb;using SQL = System.Data.SqlClient;

// // Business Tier//DataAccess data = new DataAccess();DataSet ds1, ds2;

// access a MS Access database...ds1 = data.Retrieve<MSA.OleDbConnection, MSA.OleDbCommand, MSA.OleDbDataAdapter>(“connection string”, “Select * ...”);

// now access a SQL Server database...ds1 = data.Retrieve<SQL.SqlConnection, SQL.SqlCommand, SQL.SqlDataAdapter>(“connection string”, “Select * ...”);

using MSA = System.Data.OleDb;using SQL = System.Data.SqlClient;

// // Business Tier//DataAccess data = new DataAccess();DataSet ds1, ds2;

// access a MS Access database...ds1 = data.Retrieve<MSA.OleDbConnection, MSA.OleDbCommand, MSA.OleDbDataAdapter>(“connection string”, “Select * ...”);

// now access a SQL Server database...ds1 = data.Retrieve<SQL.SqlConnection, SQL.SqlCommand, SQL.SqlDataAdapter>(“connection string”, “Select * ...”);

Page 21: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Nuevas características del lenguajeNuevas características del lenguaje

Generics – ¿Cuándo Generics – ¿Cuándo usarlo?usarlo?

Nuevas características del lenguajeNuevas características del lenguaje

Generics – ¿Cuándo Generics – ¿Cuándo usarlo?usarlo? Un poco más abstracto y Un poco más abstracto y complicado de usarcomplicado de usar

Sin embargo, es más eficienteSin embargo, es más eficienteEl compilador del lenguaje se El compilador del lenguaje se

encarga de interpretar todo, no el encarga de interpretar todo, no el CLRCLR

Page 22: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

ResumenResumen

NET en el mundo conectado – NET en el mundo conectado – líder en la industrialíder en la industria

NET Framework 2.0 NET Framework 2.0 Evolución de características y Evolución de características y

muchas mejorasmuchas mejorasPermisible en VB y C#Permisible en VB y C#Nos permite ser más productivos Nos permite ser más productivos

como desarrolladorescomo desarrolladores

Page 23: Mejoras del.NET Framework 2.0 Haaron González, MCP, MVP, MCAD PlexIT Consulting haaron.gonzalez@plexit.com.mx

Recursos adicionalesRecursos adicionales

NET, C# and VB 2.0:NET, C# and VB 2.0: http://http://msdn.microsoft.com/netframeworkmsdn.microsoft.com/netframework

// http://http://msdn.microsoft.com/vcsharpmsdn.microsoft.com/vcsharp// http://http://msdn.microsoft.com/vbasicmsdn.microsoft.com/vbasic//