- Table of Contents
- .NET Book Recommendations
- What Is .NET?
- The Microsoft .NET Framework
- The Common Language Runtime (CLR), the Common Type System (CTS), and the Common Language Specification (CLS)
- .NET Framework Class Library
- Visual Studio .NET
- .NET Enterprise Servers and .NET My Services
- .NET Compliant Languages
- C#
- Visual Basic .NET (VB .NET)
- ASP.NET
- XML Web Services
- ADO.NET
- XML.NET
- Windows Forms
- Why .NET?
- Displaying Errors with the Error Provider
- COM Interoperability
- Comparing Java and .NET
- Calling Unmanaged Code
- .NET Application Security
- Code Access Security
- .NET Standards Support
- Numeric Types in the .NET Framework
- Working with Strings
- Formatting Strings
- Trimming Character Strings
- Comparing Strings in .NET 2.0
- Arrays and Collections
- Arrays as Class Members
- Sorting a Multi-Dimensional Array
- Sorting a Multi-Dimensional Array with LINQ
- File I/O (System.IO)
- Working with File Names
- Using the File System
- Working with Files and Directories
- Monitoring the File System
- Working with Streams
- Working with Text Encodings
- Working with Date and Time
- Extending the DateTime Class
- Fun with Dates
- Exceptions
- Delegates
- Events
- Asynchronous Programming
- Asynchronous File I/O
- Timers
- Random Numbers
- Cryptographically Secure Random Numbers
- Serialization
- MultiThreading (System.Threading)
- Multi-Threading Overview
- The Managed Thread Pool
- Managed Threading
- Thread Synchronization
- Synchronizing Data Access
- Trace Debugging
- Tracing in .NET 2.0
- ASP.NET Trace
- Validating User Input in ASP.NET Web Pages
- Event Logging
- Monitoring Application Performance
- Accessing the Registry
- Accessing Environment Information
- Environment Variables in .NET 2.0
- Managing Windows Forms Applications
- Working with Email
- Working with Graphics
- Animating a Background
- Working with Images
- Drawing Cycloid Curves
- Simulating the Spirograph
- Building International Web Applications
- .NET Compact Framework
- Mobile Web Development with ASP.NET
- Speech Technologies
- Microsoft MapPoint Web Service
- Working with Typed DataSets
- Using Relationships in DataSets
- DataColumn Expressions
- Playing Simple Sounds
- Playing Sounds with .NET 2.0
- Returning an Image in a Web Page
- RSS
- Best Practices Project Structure
- Best Practices Application Blocks
- The Data Access Application Block
- The Exception Management Application Block
- Best Practices — Performance
- Best Practices — Performance and Scalability
- Best Practices - Testing
- Reading the Tea Leaves, 2005
- Predictions: A Look Back at 2005, and a Look Ahead to 2006
- .NET Downloads
- Application Deployment Overview
- Application Deployment — Versioning
- Application Deployment — Version Policy
- Application Deployment — Packaging and Distribution
- .NET Remoting Overview
- A Remoting Demonstration
- Remoting Configuration
- Remoting: Lifetimes and Leases
- Remoting: Other Issues
- Attributes
- Writing Custom Attributes
- Accessing Attributes in Code
- Reflection
- Class Design: Inheritance, Interface, or Composition?
- The TriTryst Game
- Console Applications in .NET 2.0
- New File I/O Methods in .NET 2.0
- Building Projects with MSBuild
- Unmanaged Callbacks in .NET 2.0
- Timer Troubles
- Non-Rectangular Windows Forms
- Windows Forms Transparency
- 10 Things I Hate About Visual Basic
- 10 Things I Hate About C#
- Background Processing with Idle Time
- Scaling Windows Forms
- Reading and Writing Binary Data
- New Memory Management Functions in .NET 2.0
- Compatibility Between .NET 1.1 and .NET 2.0
- Managed Debugging Assistants in .NET 2.0
- XDir: A Program for Viewing Directory Sizes
- The Microsoft.VisualBasic Namespace
- Operator Overloading
- Working with GPS Data
- Hidden Visual Studio Tools
- .NET 3.0
- The .NET 2.0 Stopwatch Class
- Nullable Types
- Drawing Rotated Text
- Unsafe Code
- Other .NET Languages
- Compiler Directives
- Safe Handles
- Predictions, 2007 Edition
- New Features in C# 3.0
- Generics
- Network Client Programming
- On the Misuse of Exceptions
- Maximum Object Size in .NET
- More on Maximum Object Sizes
- Keyed Collection Memory Limitations
- Matching String Endings
- Allocating Small Data Structures
- Grumbling About Limitations
- Some Thoughts on the Nature of What We Do
- Working with Predicates in Collections
- Working with DataReaders
- Outputting XML with XmlWriter
- Writing XML Data
- Working with Compression
- Another Look at Compressed Streams
- Compressing a Very Large File
- Canonical URIs
- Constructing URIs
- Using OneWayAttribute for Remote Calls
- Selecting a Garbage Collector
- Linked List
- Linked List Application - The MRU List
- Auto-implemented Properties in C#
- The HashSet Collection
- Looking Ahead: 2018
- An Experiment in Optimization
- A Larger Integer
- Extension Methods
- Language Integrated Query (LINQ)
- Variable Length Parameter Lists
- The ReaderWriterLockSlim Synchronization Primitive
- Sorting a Text File
- Sorting a Large Text File
- Using ListView with Large Data Sets
- LINQ One-Liners
- Regular Expression Optimization
- Random File I/O
- Computing the Size of a Structure
- More on Computing Structure Sizes
- UnmanagedMemoryStream
- Dynamically Loading Code
- Building a String Table
- Delegates Versus Function Pointers
- Visual Studio Editor Features
- A Simple Profile Timer
- New Features in C# 4.0
- IEnumerator or IList?
- New Features in .NET 4.0
- Set Operations with IEnumerable and HashSet
- Using File Locks
- Extending Object Functionality
- Clearing a HashSet
- When Hash Codes Matter
- Parsing Command Line Options
- Creating a Single-Instance Program
- Asynchronous Windows Forms Events
- The BackgroundWorker Component
- Fixing a Dumb Mistake
- Thinking About Multi-Threaded Programs
- JavaScript Object Notation
- Useful .NET-related Sites
- Markov Models
- Building an Order 0 Markov Model
- Higher Order Markov Models
- Webmaster's Guide to robots.txt
- An Overview of the Parallel Extensions to .NET
- Parallel Extensions Synchronization Objects
- Thread Safe Collections
- A Bug and a Conundrum
- Another Bug and an Answer
- Task Parallel Library
- Good and Bad Ideas in C#
- Parallel LINQ
- Copying Large Files
- Replacing File.Copy
- Learning from Our Mistakes
- Symbolic Links
- There Is No Easy Fix
- Tracking Hurricanes
- Examining Hurricane Data
- Searching for Multiple Strings
- Simple JSON Processing
- Aho-Corasick String Searching
- Writing a Web Crawler
- Web Crawler Politeness
- Source Control Management
- Subversion
- Communicating with Datagrams
- Fun with Actions and Funcs New
- The Future of Media
- The Importance of Metadata
- Of Comparison and IComparer
- IComparer, Comparer, IComparable, Oh My!
- Comparing Generic Types New
- A Simple HTTP Server New
- Informit Reference Library
Best Practices Application Blocks
Last updated Oct 21, 2004.
When you get right down to it, most applications aren't all that different from one another. I know that statement is bordering on heresy, but it's true. It might seem like your Web-based homegrown CRM application is oh-so-different from the single-client recipe program you wrote for home use, but they share an astounding amount of common code. Both access a database. Both require some kind of user authentication (well, maybe). Both need to handle exceptions, log errors and significant events, save user profile information, and process user interface events. The processing details differ significantly, but all applications contain those and other basic parts. If you're paying attention while you're writing code (something that's not quite as common as you might think, considering the state of much software today), you'll find yourself writing very similar code to handle these common tasks in every program you build.
The introduction of (or, more correctly, the marketing of) design patterns in the mid-1990s created a small revolution in software development. Developers were encouraged to abstract their problems and recognize when the problem fit into one of the many defined design patterns. By thinking in terms of common patterns, developers were able more easily to apply knowledge and implementation experience gained from previous development efforts. Some people went a bit overboard with the whole patterns thing, but the same thing happened with structured programming, object-oriented design and development, relational DBMS, and every other technology. That doesn't invalidate the concept. Thinking in terms of design patterns has proven to be a very powerful and effective way to develop software.
Some patterns are so commonly used, and often in exactly in the same way, that they become more than just patterns. They evolve into common code libraries and are included in almost every project. This is nothing new: common code libraries have been around for almost as long as programming has existed. Every programmer has his own library of common code, as does every development shop. After all, once you've figured out a good way to perform a common task, it makes sense to formalize it and put it somewhere where others can use it.
That's what Microsoft's Application Blocks are: code libraries that ease implementation of common tasks. Accessing data, for example, is a very common task in today's applications. There are many, many different ways to access data, but over the years developers have learned that just a few of those ways are generally effective. The developers of the Data Access Application Block (DAAB) recognized the common database access patterns and abstracted them into a small, consistent interface that takes most of the drudgery out of database access. Compared to the amount of code required to access data through ADO.NET directly, using the DAAB is almost trivial. And because it's implemented in a separate class, it's very easy to use unmodified in many different applications.
Application blocks are focused, typically small, abstraction layers that ease and standardize implementation of of common tasks. They cover a wide range of programming problems, and other application blocks are under development. They implement one way, the recommended way, of providing common application services, and are based on input not only from Microsoft, but also users in the field who have learned the most effective ways performing these common tasks.
The following application blocks for .NET currently exist. Follow the links for more information about the individual application blocks.
Aggregation Application Block for .NET
Asynchronous Invocation Application Block for .NET
Authorization and Profile Application Block
Caching Application Block for .NET
Configuration Management Application Block for .NET
Data Access Application Block for .NET
Exception Management Application Block for .NET
Smart Client Offline Application Block
Updater Application Block for .NET
User Interface Process Application Block Version 2.0
User Interface Process Application Block for .NET
All of these application blocks are supplied with source and examples, and all are free to download and use. If your application needs the services provided by an application block, you should seriously consider using the application block to implement it. Not only will it save you time, but it also will help to provide a standard programming infrastructure across companiesa useful thing when you're looking for .NET programmers, or even if you're a .NET programmer looking for a job.



Account Sign In
View your cart