440 likes | 544 Views
Enterprise Library 3.0 :. Oscar Berroteran Norberto Planchart Noixno,S.A. Contexto. Los componontes reusables son importantes Solucionan consistentemente problemas comunes del desarrollo de aplicaciones Los Application Blocks son el factor común para los componentes reusables
E N D
Enterprise Library 3.0: Oscar Berroteran Norberto Planchart Noixno,S.A.
Contexto • Los componontes reusables son importantes • Solucionan consistentemente problemas comunes del desarrollo de aplicaciones • Los Application Blocks son el factor común para los componentes reusables • Código fuente reusable, extensible y modificable • La Enterprise Library es un conjunto de application blocks de proposito general • No es especifica para un tipo de aplicación o estilo de arquitectura • Puede ser utilizada directamente o como un punto de partida para nuestras propias librerias o frameworks
Libreria Y de cliente Libreria X de socio Libreía Z de Cliente Ecosistema de Enterprise Library p&p Enterprise Library Bloques de p&p Bloques de socios Bloques de clientes Bloques de comunidades
Enterprise Library ES… • Unalibreria de application blocks, los cualesresuelvesproblemascomunes • Un conjunto de clasesquefuncionan con cualquiermodelo de arquitectura • Guia de arquitecturaincorporada en código, la cual se descarga con todo el cód. fuente, permitiendonosmodificarla y extenderla • Disponiblecomodescargalibre No es… • Un componente del .NET Framework • Un framework de aplicaciones que impone un estilo de arquitectura • Un producto de Microsoft con soporte, compatibilidad y regionalización • Comercial (no se vende)
Plug-in Config Helpers & Design Instrumen-tation ObjectBuilder Enterprise Library 3.0 – Application Blocks Data Access Logging Caching Core Cryptography Exception Handling Security Policy Injection Validation
Objetivos de Enterprise Library 3.0 • Tomar en cuenta el feedback recibido para los application blocks existentes • Proporcionar nuevos application blocks para dar soporte a retos adicionales en el proceso de desarrollo de software • Soportar la integración con las nuevas caracteristicas más relevantes del .NET Framework 3.0 • Aumentar la experiencia acerca de actividades claves del desarrollo • Simplificar el desarrollo de nuevos application blocks • Mantener la compatibilidad con Enterprise Library 2.0
Enterprise Library 3.0 – Nuevas Características a primera vista • Nuevos application blocks • Validation Application Block • Policy Injection Application Block • Mejoras a application blocks existentes • Data Access Application Block • Logging Application Block • Integración con .NET Framework 3.0 • Logging, Exception Handling y Validation Application Blocks • Mejoras en Configuración • Herramienta de config. Integrada en Visual Studio • Manageable Configuration Source • Automatización • Application Block Software Factory • Strong Naming Guidance Package
Plug-in Config Helpers & Design Instrumen-tation ObjectBuilder Enterprise Library 3.0 – Application Blocks Data Access Logging Caching Core Cryptography Exception Handling Security Policy Injection Validation
El Core • Configuración • Diseño de la configuración y herramientas • Instrumentación • Object Builder
Configuración • Todos los bloques son configurables • Controla como el bloque trabaja con la aplicación • Especifica cuales bloques se van a utilizar • Bloques pueden ser utilizados con (o sin) archivos de configuración • Los Factories objects construyen objetos de bloque utilizando datos de los archivos de configuración • La configuración es almacenada en archivos estandar XML (.config ) de manera predeterminada • Es poisible utilizar “Configuration Sources” alternativos • System, File, Manageable y SQL
Herramientas de configuración • Las herramientas de configuración elimina la necesidad de editar los archivos de configuración • Rápidamente se añade la configuración predeterminada de un bloque • Propiedades y providers fuertemente tipados (Strongly typed) • La configuración el validada antes de almacenar los cambios • Se permite encriptar los archivos de configuración • Es posible especificar configuraciones que son únicas para diferentes entornos (desarrollo, test, producción, etc.) • Incorpora un editor integrado a Visual Studio y también incorpora una consola de configuración externa
Instrumentación • Todos los bloques de Enterprise Library incluyen instrumentación • Event Log events • Performance Counters • Eventos WMI • De manera predertminada toda la instrumentación esta deshabilitada; pero cada tipo puede ser habilitado individualmente usando la herramienta de configuración • El código de Instrumentación está contenido en el assembly Common, lo que nos permite utilizarlo en nuestras aplicaciones
Instrumentación • Ejecute la instalaciónparacrear los artefactos de instrumenmtación: • Ejecute installservices.bat (usandounacuenta de Administrador), o • Ejecute installutil.exe sobrecada assembly de Enterprise Library assembly (usandounacuenta de administrador), o • Cree supropioinstalador • Configure suaplicaciónparautilizarinstrumentación
Object Builder • Componente compartido utilizado en varios aplicaciones p&p • Responsible de la construcción de objetos dentrol de los bloques de aplicaciones • Invocando el “custom factory” con los datos de la configuración • Can be leveraged from your own apps, but understanding ObjectBuilder is not required to use Enterprise Library • Mayor información y descargas en http://codeplex.com/objectbuilder
Plug-in Config Helpers & Design Instrumen-tation ObjectBuilder Enterprise Library 3.0 – Application Blocks Data Access Logging Caching Core Cryptography Exception Handling Security Policy Injection Validation
Escenarios de DAAB • Necesitamos una forma simple y eficiente para trabajar con repositorios de datos usualmente utilizados • Es necesario que el desarrollo con múltiples tipos de bases de datos sea transparente • SQL Server, SQL Server CE, Oracle, OLE-DB, ODBC, … • Necesitamos una manera sencilla de ajustar y validar la configuración de acceso a datos
Data Access Application Block • Nosporporciona un accesosencillo a lascaracteristicasmásutilizadas de ADO.NET, aplicandomejoresprácticas • Aumenta la consistencia • Nosda la posibilidad de escribircódigoquetrabaja contras múltiples bases de datos • Estaintegrado con la funcionalidad del namespace System.Transactions • Fácil de utilizar • Llamamos a un proc. Almacenado con unalínea de código • El DAAB administra el tiempo de vida de lasconexiones a bases de datos • Funciona de maneraindiferentesi se define la cadena de conexión en la configuración o si se escribedirectamente en código
Configurando el Data Access Application Block • Sólo necesitamos definir la cádena de conexión • La herramienta de configuración incorpora el asistente de cadenas de conexión • Es posible definir más de una cadena de conexión (instancia) para múltiples tipos de bases de datos • De forma predeterminada el DAAB es incorporado al archivo de configuración • ´Sólo se necesita la referencia a Microsoft.Practices.EnterpriseLibrary.Data.dll
Uso del Data Access Application Block • Todos los métodos del DAAB son ejecutados contra un objeto tipo DataBase • La clase DatabaseFactory crea este objeto basado en la información de configuración • Es posible utilizar directamente la cadena de conexión Dim db As Database = DatabaseFactory.CreateDatabase() Dim db As Database = DatabaseFactory.CreateDatabase("Sales") Dim myConnectionString As String = “CADENA DE CONEXION” Dim db As SqlDatabase = New SqlDatabase(myConnectionString)
Data Access - Ejemplos Public Function GetProductsInCategory(ByVal Category As Integer) As DataSet ' Create the Database object, using the database instance with the ' specified logical name. This is mapped to a connection string in ' the configuration file Dim db As Database = DatabaseFactory.CreateDatabase("Sales") ' Invoke the stored procedure with one line of code! return db.ExecuteDataSet("GetProductsByCategory", Category) ' Note: connection was closed by ExecuteDataSet method call End Function public Dataset GetProductsInCategory(string connectionString, int category) { // Create the Database object, using the specified connection string SqlDatabase db = new SqlDatabase(connectionString); // Invoke the stored procedure with one line of code! return db.ExecuteDataSet("GetProductsByCategory", category); // Note: connection was closed by ExecuteDataSet method call }
Plug-in Config Helpers & Design Instrumen-tation ObjectBuilder Enterprise Library 3.0 – Application Blocks Data Access Logging Caching Core Cryptography Exception Handling Security Policy Injection Validation
Por que un Validation Application Block? • La Validaciónes un requerimiento en el 100% de lasaplicacionesempresariales • .NET proporcionaalgunascapacidades de validación, peroestasestanunidas a tecnologías IU (ASP .NET) • Usualmenteesnecesarioimplementarreglas de validación en diferentespartes de la aplicación • Muchosescenarios de validaciónrequierenescribir mucho código de “plomería”
Escenarios de Validación • Necesitamos verificar que los datos son válidos antes de procesarlos • Necesitamos que la lógica de validación sea fácil de mantener • Durante el desarrollo y luego del deployment • Necesitamos validar los mismos datos en diferentes capas de la aplicación • Es necesario utilizar lógica consistente a nivel de validaciones
Validation Application Block – Objetivos • Especificarnuestrareglas de validaciónsólounavez • En la configuración • Usandoatributos • Programaticamente • Fácilvalidación de los datosdesdecualquier parte en la aplicación • Programaticamente • Integrada en Windows Forms, ASP.NET o WCF • Logica de validaciónpersonalizable • Librería Built-in de reglascomunes de validación (básicas) • Combinación de reglas de validación • Aplicación de multiples reglas de validación al mismotipo
Usando el Validation Application Block • Creamos nuestros objetos de negocio • Se decoran con reglas de validación • Validamos los datos cuando sea requerido • Procesamos o mostramos los resultados de las validaciones
Reglas de validación basicas • Con el Validation Application Block se incluyenlassiguientesreglas: • Not Null • Contains Characters • Regular Expression • Range • Relative DateTime • String Length • Domain • Enum Conversion • Type Conversion • Property Comparison • Todaslasreglas de validaciónpueden ser negadas • Ej. String Length must not be between 5 and 10 characters
Creando Reglas de validación compuestas • Es posible crear reglas de validación complejas, combinando múltiples reglas primitivas • Combinando reglas con lógica Booleana (AND / OR) • Asignado diferentes validators a diferentes miembros de un tipo • Especificando como objetos anidados o colecciones Specifying how nested objects or collections van a ser validados • Un tipo sencillo puede tener múltiples conjuntos de reglas que pueden ser utilizadas en diferentes contextos • Por ejemplo, Válido para mostrar o válido para almacenar • Pro ejemplo, Cliente válido o cliente preferido
Especificando reglas de validación usando atributos • Los atributos nos permiten especificar reglas de validación directamente dentro del tipo que se esta validando • La lógica de validación no cambia hasta que se re-compila la aplicación • Necesitamos el código fuente del tipo [StringLengthValidator(1, 50, Ruleset="RuleSetA", MessageTemplate="Last Name must be 1-50 characters")] public string LastName { get { returnlastName; } set { lastName = value; } } [RegexValidator(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", MessageTemplate="Invalid e-mail address", Ruleset="RuleSetA")] public string Email { get { return email; } set { email = value; } } [ObjectValidator("RuleSetA", Ruleset="RuleSetA")] public Address Address { get { return address; } set { address = value; } }
Especificando reglas de validación a través de la configuración • Las reglas de validación son almacenadas como XML y pueden ser editadas con la herramienta de configuración • La lógica de validación puede ser cambiada sin ncesidad de recompilar la aplicación • No necesitamos el cód. fuente
Validando datos– Programaticamente • No importa como se especifiquen las reglas, los objetos son validados de la misma forma • Si falla la validación, obtenemos una colleción de objetos ValidationResult • Cada resultado incluye un mensaje, tag, referencias al objeto y la propiedad que esta validandose, y una referncia al “validator” original. Validator<Customer> validator = ValidationFactory.CreateValidator<Customer>("Ruleset"); ValidationResults results = validator.Validate(customer);if (!results.IsValid) { foreach (ValidationResult result in results) { Console.WriteLine("Message={0}, Key={1}, "Tag={2}", result.Message, result.Key.ToString(), result.Tag == null ? "null" : "\"" + result.Tag.ToString() + "\""); } }
Ejemplos de Validaciones [StringLengthValidator(1, 50, Ruleset="RuleSetA", MessageTemplate="Last Name must be 1-50 characters")] public string LastName { get { returnlastName; } set { lastName = value; } } [RegexValidator(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", MessageTemplate="Invalid e-mail address", Ruleset="RuleSetA")] public string Email { get { return email; } set { email = value; } } …or in configuration Specify validation rules in attributes… Validator<Customer> validator = ValidationFactory.CreateValidator<Customer>("Ruleset"); ValidationResults results = validator.Validate(customer);if (!results.IsValid) { foreach (ValidationResult result in results) { Console.WriteLine("Message={0}, Key={1}, "Tag={2}", result.Message, result.Key.ToString(), result.Tag == null ? "null" : "\"" + result.Tag.ToString() + "\""); } } Validate objects and process results
Plug-in Config Helpers & Design Instrumen-tation ObjectBuilder Enterprise Library 3.0 – Application Blocks Data Access Logging Caching Core Cryptography Exception Handling Security Policy Injection Validation
Escenarios para el Manejo de Excepciones • Cuando se necesita un manejo de Excepciones “consistente” en la aplicación. • Al momento de implementar las mejores practicas con respecto al manejo de excepciones • No revelar información sensible a quienes acceden remotamente a las aplicaciones. • Agregar un contexto de excepciones, agrepandolas o reemplazandola. • Cuando se necesita hacer más simple el agregar código “ para administrar excepciones.
Exception Handling Application Block • Provee un simple mecanismo que permite tratar consistentemente las excepciones en una aplicación. • Se pueden definir políticas para vincular excepciones con acciones • Las Excepciones de tipo ApplicationException podrían ser registradas (en el log de Windows) • Excepciones de tipo SqlClientException pueden ser capturadas y agrupadas en un tipo DataLayerException para ser lanzadas nuevamente • Excepciones de tipo SecurityException podrían ser capturadas y reemplazadas con una de tipo AccessDeniedException, para luego lanzarla • Acciones que provee • Registro de Excepciones • Agrupar unas excepciones en otra • Reemplazar una Excepcion con otra • Mapeo a WCF Fault Contract
Exception Handling - Example Try ' some code that may throw Catch Ex As Exception If ExceptionPolicy.HandleException(ex, “Data Layer Policy”) Then Throw End Try
Plug-in Config Helpers & Design Instrumen-tation ObjectBuilder Enterprise Library 3.0 – Application Blocks Data Access Logging Caching Core Cryptography Exception Handling Security Policy Injection Validation
Escenarios de Logging • Cuando se necesita registrar datos de negocios y operaciones en varios destinos. • Cuando se necesita proveer una traza de depuración a “Soporte Productivo” • Cuando se necesita proveer auditoria para incrementar la seguridad • Para especificar “adonde van” “cuales mensajes” y en que formato. • Cuando se necesita registrar los mensajes en una amplia variedad de destinos.
Logging - Examples Dim log As LogEntry = New LogEntry log.Message = “Your message here…” log.Priority = 1 log.EventId = 100 log.Categories.Add("UI") log.Categories.Add("Debug") Logger.Write(log) // Or if you prefer one line... Customer cust = GetCustomer(123); // Log the customer – will call cust.ToString() for the log entry Logger.Write(cust, category, priority);
Recursos • Descargas • http://msdn.microsoft.com/practices • Enterprise Library Community at: • http://codeplex.com/entlib • Blogs : • http://msdn.microsoft.com/practices/Comm/EntLibBlogs/ • http://www.msmvps.com/blogs/oberroteran