Arquitectura .NET César Julio Bustacara M. 2008 Agenda Guías de arquitectura, diseño y código Arquitectura del .NET Framework y la CLR Acceso a datos: ADO.NET Guías de arquitectura / diseño y código Guías de Arquitectura (PAG) Estándares de desarrollo Application Blocks Guías de migración Guías de arquitectura Guías de diseño para aplicaciones .NET Muestran como encaja todo junto Blueprint para decisiones a nivel de diseño Alto riesgo en la etapa de diseño Arquitectos son contrarios al riesgo No es una solución para todos los diseños Hay escenarios específicos Preservar las inversiones “¿Tendré que rehacer todo en el futuro?” Guías de Arquitectura Security Security Operational Management Management Operational Communication Communication Users Users and and Devices Devices Presentation Presentation Business Business Svc Svc Interfaces Interfaces Svc Svc Agents Agents Data Data Data Sources Services Guías de Arquitectura Security Security Operational Management Management Operational Communication Communication Users Users and and Devices Devices UI UI Components Components UI UI Process Process Components Components Business Business Workflows Workflows Svc Svc Interfaces Interfaces Business Business Components Components Business Business Entities Entities Data Data Access Access Components Components Data Sources Svc Svc Agents Agents Services Guías de Arquitectura Application Architecture for .NET: Designing Applications and Services .NET Data Access Architecture Guide Building Secure ASP.NET Applications Debugging .NET Applications Exception Management in .NET Guías de Arquitectura .NET/COM Migration and Interoperability Monitoring in .NET Deploying .NET Applications Team Development with SourceSafe UNIX Code Migration Guide http://msdn.microsoft.com/practices/ Estándares de desarrollo Ayudan a escribir código robusto y seguro que funciona de manera consistente con el Framework .NET Facilitan la propiedad colectiva del código .NET Framework Design Guidelines http://msdn.microsoft.com/library/enus/cpgenref/html/cpconnetframeworkdesigngu idelines.asp FxCop: analiza el código managed para chequear las prácticas recomendadas http://www.gotdotnet.com/team/libraries/ Application Blocks Data Access Application Block for .NET Componente .NET que contiene código optimizado de acceso a datos Exception Management Application Block for .NET Provee un framework simple y extensible para manejar excepciones Arquitectura del Framework de .NET y la CLR Objetivos de diseño Arquitectura Beneficios Compilación Introducción a .NET Objetivos de diseño de .NET Framework Entorno consistente de orientación a objetos: mismo modelo para ejecución local, código remoto o entorno distribuido en Internet Minimizar conflictos: implantación y versiones Proporcionar ejecución segura de código Introducción a .NET Objetivos de diseño de .NET Framework Eliminar problemas de rendimiento de código interpretado o con scripting Mayor productividad del desarrollador tanto para aplicaciones Windows como Web Comunicación basada en estándares de la industria Introducción a .NET Framework, Lenguajes y Herramientas VB C++ C# JScript ® J# Common Language Specification Windows Forms (.NET CF) ADO.NET y XML Base Class Library Common Language Runtime Sistema Operativo Visual Studio® .NET ASP.NET Web Forms Web Services Mobile Internet Toolkit Introducción a .NET Framework, Languajes y herramientas System.Web Services Description UI HtmlControls Discovery WebControls System.Windows.Forms Design Protocols ComponentModel System.Drawing Caching Security Drawing2D Printing Configuration SessionState Imaging Text System.Data System.Xml OleDb SqlClient XSLT Common SQLTypes XPath Serialization System Collections IO Security Runtime InteropServices Configuration Net ServiceProcess Diagnostics Reflection Text Remoting Globalization Resources Threading Serialization Introducción a .NET Beneficios del .NET Framework Simplifica el desarrollo y la implantación Proporciona un entorno de ejecución seguro y robusto Unifica modelos de programación Soporta múltiples lenguajes de programación Independiente de la plataforma Introducción a .NET Beneficios del .NET Framework Sistema común de tipos Instancias y definición de tipos comunes Orientación a objetos: Clases e interfaces Constructores, propiedades, métodos, eventos Herencia cruzada entre lenguajes Interoperabilidad Con COM Con DLLs nativas (del estilo Win32) Introducción a .NET Beneficios del .NET Framework Elimina la “fontanería” de COM No más … Registro =>Aps autodescriptivas GUIDs =>namespaces jerárquicos Archivos .IDL =>objetos autodescriptivos HRESULTs =>excepciones estructuradas IUnknown =>objeto raiz común AddRef/Release =>garbage collector CoCreateInstance =>operador ”new” Introducción a .NET Compilación y ejecución Compilación Código fuente Compilador del lenguaje Código Nativo Compilador JIT Ejecución Código (IL) Assembly Metadatos En instalación o la primera vez que se invoca a cada método Acceso a datos: ADO.NET ADO vs ADO.NET Características de ADO.NET Arquitectura Enlace a datos (binding) ADO vs ADO.NET ADO trabaja bien, pero: Necesita COM y Windows Los recordsets no viajan bien a través de Internet ADO.NET resuelve estos problemas: Utiliza XML (a bajo nivel) para realizar el transporte de datos XML no tiene requisitos específicos de runtime/transporte ⌧ No se necesita un código especial para hacer el marshaling a través de Internet ADO .NET, una nueva mentalidad: Entorno desconectado Todo el transporte de datos utiliza XML ADO.NET DBLib, ODBC, DAO, RDO, ADO, …. ADO.NET System.Data: la clase raiz A partir de ahí, principales namespaces: System.Data.OleDB System.Data.SQLClient System.Data.ODBC, System.Data.OracleClient System.XML: para trabajar directamente con XML ADO.NET System.Data.OleDb: trabaja con todas las fuentes OLE DB Soporta unmanaged providers de ADO System.Data.SQLClient: sólo SQL Server (managed) VStudio 2003: System.Data.ODBC, System.Data.OracleClient Arquitectura de ADO.NET Presentación Windows Forms MiAp.Exe DataSet Negocio Web forms Internet intranet IE DataSet Business to business (BizTalk, por ejemplo) Xml Datos Data object (class) Data adapter DataSet Data adapter Diferencia fundamental En ADO: Recordset Buffer de datos Acceso a datos En ADO.NET: Buffer de datos DataSet Acceso a datos DataAdapter ADO.NET: Connection OleDbConnection/SQLConnection Representa la sesión contra la BD Utilizado por objetos Data Adapter y Command para recuperar/actualizar Inicia las transacciones Connection.BeginTransaction() devuelve un objeto Transaction xxxTransaction ⌧Un comando se enlista en una transacción ⌧IsolationLevel ⌧Commit() / Rollback() Configuración del pool de conexiones en el connection string ADO.NET: Command OleDbCommand/SQLCommand Representa Transact-SQL o procedimientos almacenados Devuelve un resultset (ExecuteReader), un valor (ExecuteScalar), o ejecuta sentencias de modificación (ExecuteNonQuery) Generación automática con el objeto CommandBuilder ADO.NET: DataReader OleDbDataReader/SQLDataReader Stream forward-only read-only Utilizado por el DataAdapter Muy rápido Creado por un objeto Command (ExecuteReader) ADO.NET: DataAdapter OleDbDataAdapter/SQLDataAdapter Representa un conjunto de Commands y una Connection Puente entre el DataSet y la BD Lee y actualiza la BD: SelectCommand, UpdateCommand, InsertCommand, DeleteCommand ADO.NET – DataAdapter DataAdapter SelectCommand Base de datos InsertCommand UpdateCommand DeleteCommand TableMappings DataSet ADO.NET: DataSet Objeto estrella en ADO.NET Representa una caché de datos en memoria Contiene DataTables Lee y escribe datos y esquemas en XML Serializable ADO.NET: DataSet Puede ser tipado o no tipado: Ambos heredan de la clase DataSet El tipado se apoya en un esquema XML (.XSD) para generar la clase El tipado tiene ventajas: ⌧Expone estructura como propiedades y métodos: Intellisense ⌧Recoge la Primary key ADO.NET: Otros objetos DataTable Representa una tabla en memoria Lo rellena un DataAdapter o a mano Componente principal de los objetos DataSet y DataView DataView Vista personalizada de un objeto DataTable Filtros, ordenación, búsquedas … DataRelation Define relaciones entre tablas Utiliza columnas de un DataTable ADO.NET - DataSet DataSet DataTable DataColumn DataTable DataRow Relations XML Schema Constraints ADO.NET: Lecturas Método Fill del objeto DataAdapter Se utiliza el SelectCommand del DataAdapter Inserta/actualiza datos del DataSet Si la tabla existe, actualiza datos Si no existe, crea y rellena la tabla Una tabla por cada resultset Mantiene la conexión en su estado original ADO.NET: Actualizaciones La funcionalidad en ADO es implícita. Recordset = caja negra. Ejemplo: UpdateBatch En ADO.NET: Se crea un modelo más explícito y transparente. InsertCommand, UpdateCommand, DeleteCommand Eventos de Update CommandBuilder: generación automática de los comandos de Insert, Update y Delete a partir del SelectCommand ADO.NET: Actualizaciones DataAdapter.Update: Analiza los cambios del DataSet Ejecuta los comandos Insert, Update y Delete necesarios Refresca el DataSet Orden de ejecución por defecto: Insert, Update y Delete. ADO.NET: Enlace a datos ADO.NET soporta enlazar (binding) DataSets a Windows Forms / Web Forms y sus controles VStudio .NET incluye bastantes wizards para hacer el enlace entre datos y controles Resumen Resumen Ejemplo Solo lectura