350 likes | 536 Views
Enterprise Library 3.0: What’s New?. The Story So Far…. Application Blocks are reusable, extensible source-code components that provide guidance for common development challenges Enterprise Library is a collection of general purpose application blocks
E N D
The Story So Far… • Application Blocks are reusable, extensible source-code components that provide guidance for common development challenges • Enterprise Library is a collection of general purpose application blocks • Caching, Configuration, Cryptography, Data Access, Exception Handling, Logging, Security • Emphasis on Consistency, Extensibility, Ease of Use and Integration • Originally designed for .NET Framework 1.1 (January/June 2005 releases) and updated for .NET Framework 2.0 (January 2006 release) • Enterprise Library has become a standard for .NET development and is often used as a basis for custom frameworks
Goals of Enterprise Library 3.0 • Address top feedback received for existing application blocks • Provide new application blocks to support additional development challenges • Support integration with relevant features of .NET Framework 3.0 • Improve the experience around key development activities • Simplify the development of new application blocks and extensions • Retain compatibility with Enterprise Library 2.0
Enterprise Library 3.0 – New Features At a Glance • New application blocks • Validation Application Block • Policy Injection Application Block • Improvements to existing application blocks • Data Access Application Block • Logging Application Block • .NET Framework 3.0 integration • Logging, Exception Handling and Validation Application Blocks • Configuration improvements • Visual Studio-integrated configuration tool • Environmental Overrides • Manageable Configuration Source • Automation • 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
Validation Application Block – Goals • Specify your validation rules once • In configuration • Using attributes • Programmatically • Easily validate data from anywhere in your application • Programmatically • Integrated into Windows Forms, ASP.NET or WCF • Composable validation logic • Built-in library of common primitive validation rules • Combine validation rules on type members and using Boolean logic • Apply multiple validation rule sets to the same types
Supplied Validation Rules • Validation Application Block includes the following rules: • Not Null (value must not be null) • Contains Characters (e.g. does not contain any of /\?<>”:) • Regular Expression (e.g. value is a valid e-mail address) • Range (e.g. must be from 10-20 or 1/1/1950 to 12/31/1999) • Relative DateTime(e.g. birth date is more than 18 years ago) • String Length (e.g. string is at least 8 characters long) • Domain (e.g. must be one of {John, Paul, George, Ringo}) • Enum Conversion (e.g. string can be converted to a value in the Color enumtype) • Type Conversion (e.g. string can be converted to a DateTime) • Property Comparison (e.g. MaxDate > MinDate) • All validation rules can be negated • E.g String Length must not be between 5 and 10 characters
Composing Validation Rules • You can build complex validation rule sets by combining multiple primitive rules • Combining rules with Boolean AND / OR logic • Assigning different validators to different members of a type • Specifying how nested objects or collections are to be validated • A single type may have multiplerule sets that can be used in different contexts • For example, Valid for displaying or Valid for persisting • For example, Valid Customer or Preferred Customer
Specifying Validation Rules using Attributes • Attributes allow you to specify validation rules directly within the type being validated • Validation logic cannot be changed without recompiling • You must own the source code of the type [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; } }
Specifying Validation Rules using Configuration • Validation rules are stored in XML and can be edited with the Enterprise Library configuration tool • Validation logic can be changed without recompiling • You don’t need to own the source code of the type
Validating Data – Programmatically • Regardless of how you specify rules, objects are validated in the same way • If validation fails, you get a collection of ValidationResult objects • Each result includes a message, tag, references to the object and property being validated, and a reference to the original validator. 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() + "\""); } }
Integrating with WinForms, ASP.NET or WCF • Supplied “Integration Adapters” make it easier to validate data in UI layers and service boundaries • Windows Forms and ASP.NET integration allow you to associate a control with the validation rules for a particular type and member • Validation failures are displayed alongside the control being validated • Includes events for converting user input to the correct type for validation • WCF integration implemented as a WCF Behavior that validates data at the service interface layer • Rules are defined within data contract types or using attributes on the service contract
Policy Injection Application Block - Goals • Separate cross-cutting concerns from business logic • Use interception and injection to apply policies at runtime • Allow policies to be defined using configuration or attributes • Include matching rules for common scenarios • Applies policies at fine-grained level (searching for specific members or attributes) or coarse-grained (all types in a namespace or assembly) • Include handlers that integrate with Enterprise Library to implement common cross-cutting concerns • Validation, Logging, Authorization, Exception Handling, Caching, Performance Counters • Allow users to use custom interception mechanisms
Policy Injection Application Block – Basics • Policy Injection Application Block provides a factory for creating or wrapping policy-enabled objects • If policies are defined in attributes or configuration, a proxy is returned in lieu of the real object • When calling policy-enabled members, a handler pipeline is executed before and after the real member is called • Each handler can read and manipulate the data going in and out of the call
Defining Policies • Policies defined in configuration consist of a set of matching rules and the definition of the handler pipeline • Matching rules are predicates that specify which members the policy should apply to • Handlers can also be applied directly to types and members using attributes [ValidationCallHandler] public void Deposit( [RangeValidator(typeof(Decimal), "0.0", RangeBoundaryType.Exclusive, "0.0", RangeBoundaryType.Ignore)] decimal depositAmount) { balance += depositAmount; }
Supplied Handlers • Validation Handler • Validates parameters to a method using validation rules defined for the types or as attributes attached to the parameters. If validation fails, an exception is returned and the method is not called. • Logging Handler • Logs before and/or after the method is called, optionally including the call stack, parameter values, return values, exceptions and call execution time • Authorization Handler • Uses the specified Authorization provider to check if the current user (thread principal) is authorized to perform the operation. If authorization fails, an exception is returned and the method is not called.
Supplied Handlers (continued) • Exception Handling Handler • If the method throws an exception, the exception is processed using the Exception Handling Application Block and the returned exception is sent back to the called • Caching Handler • Checks if the method has recently been called, and if so, returns the cached return value instead of calling the method. If not, the method is called and the return value is cached for future use • Performance Counter Handler • Increments a number of performance counters to measure the number of times the method is called, the rate at which it is called, the average call duration and the number of exceptions thrown
Data Access Application Block • SQL Server Compact Edition provider • New SqlCeDatabase class that integrates with the SQL CE managed provider • TransactionScope integration • Prevents escalation to DTC when multiple updates are made to the same database within a TransactionScope context • Batch updates • UpdateDataset now supports an updateBatch size parameter
Logging Application Block • Rolling Flat File Trace Listener • Automatically creates a new file based on file size or date/time • Improved Text Formatter • Reflected Property Token, to retrieve data out of custom LogEntry types • Display timestamps in local or UTC time
WCF Integration • Exception Handling Application Block • ExceptionShieldingBehavior can be specified on a service contract • Calls the Exception Handling Application Block to shield exceptions from the caller • Logging Application Block • EntLibLoggingProxyTraceListener can be configured to enable the Logging Application Block to process WCF trace events • XmlTraceListener can be used with the block to output events in the format consumable by WCF diagnostics tools • Validation Application Block • ValidationBehavior can be specified on a service contract to enable validation of data contracts
Visual Studio-integrated Configuration Tool • Edit configuration from within the IDE • Launched from .config files in the Solution Explorer • Can be configured to point to different sets of assemblies
Environmental Overrides • Simplifies management of configuration files across multiple environments • Separates master configuration files from environment-specific delta files • Specify which settings to override on a node-by-node basis • Merge configuration files using the configuration tool or a command-line tool
Manageable Configuration Source • Configuration Source designed to make it easier to build more manageable applications • Based on the FileConfigurationSource, allowing applications to read configuration from any .config file, plus: • Administrators may publish changes to applications’ configuration using Group Policy • The resulting merged configuration is published using WMI to enable querying through operations tools such as Microsoft Operations Manager • No code changes required by developers to support this!
Application Block Software Factory • Enterprise Library 3.0 includes a new software factory for building your own application blocks and extensions to existing application blocks • Features include: • Code generation in either C# or Visual Basic .NET • Solution templates for Application Blocks and Provider Libraries • Recipes to create custom providers for Enterprise Library application blocks Including Validators, Trace Listeners, Exception Handlers and Authorization Providers Strongly-typed or property bag-based configuration • Recipes to create new factories, provider bases and providers for your own blocks • Recipes to create design-time configuration code from runtime configuration classes
Strong Naming Guidance Package • Strong-naming Enterprise Library is recommended, but complex • 90+ projects, including design-time and tests • Use of [InternalsVisibleTo] attribute for testing • Strong Naming Guidance Package automates: • Generating strong-name key pairs • Specifying that projects should be strong-named • Updating [InternalsVisibleTo] to include public key • Can be run on Enterprise Library or any other solution • Enterprise Library 3.0 also ships with pre-built, strong-named assemblies which you can use if you don’t want to modify the code.
Migration from previous versions • This release is 100% API compatible with the previous January 2006 release of Enterprise Library • Configuration formats for existing blocks are unchanged, but assembly version numbers and possibly public key tokens will need to be changed • Multiple versions of Enterprise Library can be installed on the same machine, but cannot be used together in the same application • Enterprise Library 3.0 can be used with either .NET Framework 2.0 or .NET Framework 3.0 installed • WCF-specific functionality requires .NET Framework 3.0
Resources • Download Enterprise Library and related resources from: • http://msdn.microsoft.com/practices • Join the Enterprise Library Community at: • http://codeplex.com/entlib • Read blogs from the Enterprise Library team at: • http://msdn.microsoft.com/practices/Comm/EntLibBlogs/