Reengineer .NET Code to Improve Quality, Update Architecture, Access New Tools, and Accelerate Delivery of New Features As software ages, it becomes brittle: difficult to understand, fix, manage, use, and improve. Developers working with many platforms have encountered this problem; now, developers working with Microsoft's .NET are facing it as well. In Reengineering .NET, leading .NET architect Bradley Irby introduces proven best practices for revitalizing older .NET code and integrating new architectural and development advances into business-critical systems that can't go offline. Using a step-by-step approach, .NET professionals can make legacy enterprise software more reliable, maintainable, attractive, and usableand make it easier to upgrade for years to come. Through real-world case studies and extensive downloadable sample code, Irby shows how to carefully plan a .NET reengineering project, understand the true current state of your code, introduce unit testing and other agile methods, refactor to services and controllers, and leverage powerful .NET reengineering tools built into Microsoft Visual Studio 2012. This book is an indispensable resource for all developers, architects, and project managers responsible for existing .NET code bases and for a wide audience of non-technical managers and CTOs who want to understand the unique challenges faced by .NET teams involved in application or system reengineering projects. Coverage includes*; Migrating legacy .NET software to more flexible, extensible, and maintainable architectureswithout breaking it*; Reengineering web applications with the MVC pattern, Winforms software with MVP, and WPF/Silverlight systems with MVVM*; Asking the right questions to predict refactoring problems before they happen*; Planning and organizing reengineering projects to apply the right expertise to each task at the right time*; Using innovative Test Doubling to make unit testing even more effective*; Applying Dependency Inversion to break tight coupling and promote easier development and testing*; Leveraging source control, defect tracking, and continuous integration*; ';Cleaning up' legacy solutions to improve them before you even touch business logic*; Establishing solid development infrastructure to support your reengineering project*; Refactoring to servicesincluding advanced techniques using Repositories, Domain Models, and the Command Dispatcher*; Refactoring to controller/view or ViewModel/View pairs