Post on 03-Feb-2015
““ORCAS”ORCAS”
La nueva generación de Visual StudioLa nueva generación de Visual Studio
Octavio HernándezOctavio HernándezPlain ConceptsPlain Concepts
Developer AdvisorDeveloper Advisoroctavio@plainconcepts.comoctavio@plainconcepts.com
David SalgadoDavid SalgadoMicrosoft Microsoft División de desarrollo y PlataformaDivisión de desarrollo y Plataformadavidsb@microsoft.comdavidsb@microsoft.com
¿Qué hay de nuevo en “Orcas”?¿Qué hay de nuevo en “Orcas”?
¿Qué hay de nuevo en “Orcas”?¿Qué hay de nuevo en “Orcas”?
LINQLINQ
“Your software, our passion”
WPFWPF
AJAXAJAX
WPFWPF
AJAXAJAX
WCF / WFWCF / WF
WPFWPF
AJAXAJAX
WCF / WFWCF / WF
Office Office
WPFWPF
AJAXAJAX
WCF / WFWCF / WF
Office Office
WPFWPF
……
Siguiente VSTS/TFS
Siguiente VSTS/TFS“Integrated solutions, not just tools”
RequisitosRequisitos
TestingTesting
RequisitosRequisitos
TestingTesting
ReportingReporting
RequisitosRequisitos
TestingTesting
ReportingReporting
ManagementManagement
RequisitosRequisitos
TestingTesting
ReportingReporting
ManagementManagement
RequisitosRequisitos
DSIDSI
TestingTesting
ReportingReporting
ManagementManagement
RequisitosRequisitos
……
DSIDSI
IDE “ORCAS”IDE “ORCAS”
LINQLINQ
IEnumerable<Film> dramas = from f in Film.Datos where f.Género == Género.Drama select new { f.Nombre, f.Año };
Expresiones de consulta
IEnumerable<Film> dramas = from f in Film.Datos where f.Género == Género.Drama select new { f.Nombre, f.Año };
var dramas = Film.Datos .Where(f => f.Género == Género.Drama) .Select(f => new { f.Nombre, f.Año });
Expresiones de consulta
IEnumerable<Film> dramas = from f in Film.Datos where f.Género == Género.Drama select new { f.Nombre, f.Año };
var dramas = Film.Datos .Where(f => f.Género == Género.Drama) .Select(f => new { f.Nombre, f.Año });
Expresiones de consulta
Métodos extensores
Expresiones lambda
Inicializadores de objetosTipos
anónimos
Inferencia de tipo de variables
localesÁrboles de
expresiones
LINQ to ObjectsLINQ to Objects
• HoyHoyXmlDocument doc = new XmlDocument();XmlElement films = doc.CreateElement(“films");foreach (Film f in Film.Datos) if (f.Género == Género.Drama) { XmlElement elem = doc.CreateElement(“film"); XmlElement n = doc.CreateElement("nombre"); n.InnerText = f.Nombre; elem.AppendChild(n); XmlElement a = doc.CreateElement(“año"); a.InnerText = f.Año; elem.AppendChild(a); films.AppendChild(elem); }doc.AppendChild(films);doc.Save(“DRAMAS.XML”);
<films> <film> <nombre>CASABLANCA</nombre> <anno>1942</anno> </film> …</films>
Modeloimperativo
Orientado al documento
Sin consultas integradas
Alta exigencia de memoria
• Con LINQ to XMLCon LINQ to XML
• Sintaxis especial en VB 9.0Sintaxis especial en VB 9.0
XElement films = new XElement(“films", from f in Film.Datos where f.Género == Género.Drama select new XElement(“film", new XElement("nombre", f.Nombre), new XElement(“año", f.Año)));Films.Save(“DRAMAS.XML”);
Modelo declarativo
Orientado a elementos
Consultas integradas
Más compacto y rápido
LINQ to XMLLINQ to XML
• HoyHoySqlConnection c = new SqlConnection(cadenaCon);c.Open();SqlCommand cmd = new SqlCommand( @"SELECT c.NombreApellidos FROM Personas WHERE Sexo = @p0“, c);cmd.Parameters.AddWithValue("@p0", sexo);DataReader dr = cmd.ExecuteReader();while (dr.Read()) { string nombreApellidos = dr.GetString(0);}dr.Close();
Consultas entre comillas
Parámetros sin control de tipos
estricto
Resultados sincontrol de tipos
estricto
Sin comprobación del compilador
• Con LINQ to SQLCon LINQ to SQLpublic class Persona { … }
public class FilmsDataContext : DataContext{ public Table<Persona> Personas; …}
var db = new FilmsDataContext();var delMismoSexo = from f in db.DBPersonas where f.Sexo == sexo select f.NombreApellidos;
Clases que describen los
datos
Conexiones fuertemente
tipadas
Consultas integradas
Resultados fuertemente
tipados
Tablas como colecciones
LINQ to SQLLINQ to SQL
• Mapeado lógico/físicoMapeado lógico/físico– Por defecto, 1:1 con la BB.DD.Por defecto, 1:1 con la BB.DD.– Modelo de datos basado en ENTIDADESModelo de datos basado en ENTIDADES
•Proveedor de mapeadoProveedor de mapeado•Entidades, relaciones, herenciaEntidades, relaciones, herencia
– Renombrar tablas y campos, crear jerarquías entre Renombrar tablas y campos, crear jerarquías entre tablas, eliminar las “tablas de relación”, etc.tablas, eliminar las “tablas de relación”, etc.
– FlexibilidadFlexibilidad– Acceso al proveedor del almacén en caso Acceso al proveedor del almacén en caso
necesarionecesario
• MSDNMSDN– http://msdn.microsoft.com/data/ref/linq/
• MSDN en castellanoMSDN en castellano– http://www.microsoft.com/spanish/msdn/articulo
s/architec/fecha/2007.mspx• Especificación de C# 3.0Especificación de C# 3.0• El proyecto LINQEl proyecto LINQ• Operadores de consulta estándar de .NETOperadores de consulta estándar de .NET• Acceso a datos de próxima generaciónAcceso a datos de próxima generación• Presentación técnica de ADO.NETPresentación técnica de ADO.NET• El Marco de Entidades de ADO.NETEl Marco de Entidades de ADO.NET
• dotNetManíadotNetManía– ““Lo que nos traerá Orcas”Lo que nos traerá Orcas”
• Novedades en C# 3.0 (Nº 24, marzo de 2006) Novedades en C# 3.0 (Nº 24, marzo de 2006) • La tecnología LINQ (Nº 25)La tecnología LINQ (Nº 25)• VB 9.0 y LINQ (Nº 27)VB 9.0 y LINQ (Nº 27)• LINQ to XML (Nº 29)LINQ to XML (Nº 29)• LINQ to DataSet (Nº 32)LINQ to DataSet (Nº 32)• LINQ to SQL (Nº 36, abril de 2007)LINQ to SQL (Nº 36, abril de 2007)• Serie sobre ADO.NET vNext y LINQ to Entities (próxima aparición)Serie sobre ADO.NET vNext y LINQ to Entities (próxima aparición)
• Web de “El Guille”Web de “El Guille”– http://www.elguille.info/