Modern object-oriented and generic programming and design in the .NET Framework. Software Architecture and Design.