Session Title
Download
Report
Transcript Session Title
Doing Something Useful
with Enterprise Library
3.0
Benjamin Day
Level: Intermediate
About the speaker
Owner, Benjamin Day Consulting, Inc.
– Email: [email protected]
– Web: http://www.benday.com
– Blog: http://blog.benday.com
Trainer
– Visual Studio Team System, Team Foundation Server
Microsoft MVP for C#
Microsoft VSTS/TFS Customer Advisory
Council
Leader of Beantown.NET INETA User Group
Agenda
Overview
Policy Injection
Logging
Exception Handling
Validation
Why Enterprise Library?
Why not?
– Why write and re-write common application code?
Focus on solving the core business problem
Microsoft solved it for you
– Standardized solution
– Hooks in nicely with .NET through configs
It’s free
http://codeplex.com/entlib
Ent Lib 3.0 – Application Blocks
Data
Access
Caching
Logging
Core
Cryptography
Config
Helpers
& Design
Plug-in
Instrumentation
Exception
Handling
Object
Builder
Security
Policy Injection
Validation
http://tinyurl.com/3d8xfw
Data Access Block
Wraps common actions for database access
Handles closing of connections, IDispose calls
Some degree of database independence
Relatively easy to understand
Adopting Enterprise Library
Why is this talk titled
“Doing Something Useful…”?
Can be like swimming in the Atlantic at low
tide in the spring
What does this have to do with the Data
Access Block?
Does it have to be so difficult?
My $0.02 on where begin
Start with the Policy Injection Block
– Allows you to defer decisions on other blocks
Configure PIB to use logging
– Simple way to debug your configuration
Exception Handling Block
– (eat your vegetables)
Caching
– Fix performance problems
Policy Injection Block
Uses magic
Mostly elves
Some wood nymphs for reliability
Just kidding.
Policy Injection Block
Layer of abstraction
Lets you hook functionality in at runtime via
config
Intercepts calls in to an object’s methods
Think aspect-oriented programming or
dependency injection for methods
The Overall Design
Getting started with the PI block
Two ways to use Policy Injection:
– Objects extend from MarshalByRef
– Code against interfaces instead of concrete classes
Add references
– Microsoft.Practices.EnterpriseLibrary.PolicyInjection
– Microsoft.Practices.ObjectBuilder
– Microsoft.Practices.EnterpriseLibrary.CallHandlers
– Plus, whatever block you’ll reference from PI
Edit app.config/web.config with
EntLibConfig.exe
Calling into the PI framework
Call PolicyInjection.Create<T>() or one of the
overloads
Returns a wrapper to your object
Call your methods through the wrapper
Configuration
EntLibConfig.exe
Uses the Remoting
Policy Injector
Policy consists of
– Matching Rules
– Handlers
Matching Rules
Tells the framework when to run the policy
Handlers
Tells the framework what to do when it finds
a policy match
Logging Handler
Through policy injection framework,
intercepts calls
Writes message to log before and/or after
Logging Application Block
Logs activity in
your app
Trace Listeners
– Where does it get
stored?
Formatters
– How does it get
stored?
Filters
– What to write?
Logging Block Design
Trace Listeners
Formatters
Demo
Add Policy Injection to an existing app
Configure logging
Exception Handling Block
Allows you to define how to treat exceptions
Option: Catch and re-throw different
exception
Option: Eat the exception
Design of the
Exception Block
Demo
Add exception handling to our app via Policy
Injection
Wrap Handlers
Replace Handlers
Demo
Add Exception Handling to a WCF application
The Validation Block
About the Validation Block
Allows you to validate access to your objects
Validation logic can be stored outside of your
objects in the configs
Validation can also be defined via attributes
Similar to a rules engine
– Think Windows Workflow Rules “light”
Available Validators
And Composite
Object Validator
Contains
Characters
Or Composite
Property Compare
Date Time Range
Domain
Range Validator
Enum Conversion
RegEx
Not Null
Relative Date Time
Object Collection
String Length
Type Conversion
Common Validator Fields
MessageTemplate
– Provides a human-readable error message
– Overrides the default implementation
MessageTemplateResourceName
– Enables messages in resource files
MessageTemplateResourceType
Negate
– If statement evaluates to true rule fails
– false succeeds
Tag
– Category for the validation
Message Template Tokens
Think String.Format()
Use these to create custom messages
{0}
– Original value being validated
{1}
– “Key” for the value
– If property or field name (m_id or Id)
– If object null
{2}
– The tag value if available
Service Layer Pattern
“Defines an application’s
boundary with a layer of
services that establishes a
set of available operations
and coordinates the
application’s response in
each operation.”
-Randy Stafford
From “Patterns Of Enterprise Application Architecture”
by Martin Fowler, Randy Stafford, et al.
Chapter 9
Demo
Validate Restaurant with the ValidationFactory
The Caching Block
Allows you to
cache return
values from
method, properties
Easy to add with
the Policy Injection
Block
Demo
Populate list of states using the caching block
Summary
Policy Injection Block Helps Speed Adoption
Logging Block
Exception Handling Block
Exception Handling in WCF
Validation Block
Caching Block
About the speaker
Owner, Benjamin Day Consulting, Inc.
– Email: [email protected]
– Web: http://www.benday.com
– Blog: http://blog.benday.com
Trainer
– Visual Studio Team System, Team Foundation Server
Microsoft MVP for C#
Microsoft VSTS/TFS Customer Advisory
Council
Leader of Beantown.NET INETA User Group