How we did it:
For any feedback, any questions, any notes or just for chat - feel free to follow us on social networks
Michael C. Feathers
The average book on Agile software development describes a fairyland of greenfield projects, with wall-to-wall tests that run after every few edits, and clean & simple source code.
The average software project, in our industry, was written under some aspect of code-and-fix, and without automated unit tests. And we can't just throw this code away; it represents a significant effort debugging and maintaining. It contains many latent requirements decisions. Just as Agile processes are incremental, Agile adoption must be incremental too. No more throwing away code just because it looked at us funny.
Mike begins his book with a very diplomatic definition of "Legacy". I'l skip ahead to the undiplomatic version: Legacy code is code without unit tests.
Before cleaning that code up, and before adding new features and removing bugs, such code must be de-legacified. It needs unit tests.
To add unit tests, you must change the code. To change the code, you need unit tests to show how safe your change was.
The core of the book is a cookbook of recipes to conduct various careful attacks. Each presents a particular problem, and a relatively safe way to migrate the code towards tests.
Code undergoing this migration will begin to experience the benefits of unit tests, and these benefits will incrementally make new tests easier to write. These efforts will make aspects of a legacy codebase easy to change.
It's an unfortunate commentary on the state of our programming industry how much we need this book.
Ralph Johnson, Erich Gamma, John Vlissides, Richard Helm
Capturing a wealth of experience about the design of object-oriented software, four top-notch designers present a catalog of simple and succinct solutions to commonly occurring design problems. Previously undocumented, these 23 patterns allow designers to create more flexible, elegant, and ultimately reusable designs without having to rediscover the design solutions themselves. The authors begin by describing what patterns are and how they can help you design object-oriented software. They then go on to systematically name, explain, evaluate, and catalog recurring designs in object-oriented systems. With Design Patterns as your guide, you will learn how these important patterns fit into the software development process, and how you can leverage them to solve your own design problems most efficiently. Each pattern describes the circumstances in which it is applicable, when it can be applied in view of other design constraints, and the consequences and trade-offs of using the pattern within a larger design. All patterns are compiled from real systems and are based on real-world examples. Each pattern also includes code that demonstrates how it may be implemented in object-oriented programming languages like C++ or Smalltalk. 0201633612B07092001
This volume is a handbook for enterprise system developers, guiding them through the intricacies and lessons learned in enterprise application development. It provides proven solutions to the everyday problems facing information systems developers.
Features the best practices in the art and science of constructing software--topics include design, applying good techniques to construction, eliminating errors, planning, managing construction activities, and relating personal character to superior software. Original. (Intermediate)
Martin Fowler, Kent Beck
Users can dramatically improve the design, performance, and manageability of object-oriented code without altering its interfaces or behavior. "Refactoring" shows users exactly how to spot the best opportunities for refactoring and exactly how to do it, step by step.
Build your expertise as you move beyond the basics—and delve into the core topics of programming with ASP.NET 2.0. Useful to both experienced developers and those developing new skills, this ultimate reference is packed with expert guidance, hands-on programming instruction, and practical examples to help you advance your mastery of developing applications for the Web. Discover how to: Author rich, visually consistent pages and manage layout with themes and Master pages Create personalized pages that persist user preferences Retrieve, modify, and manage data with Microsoft ADO.NET Configure the HTTP pipeline to serve ASP.NET 2.0 pages Control program flow by tracing and handling exceptions Design caching layers and learn state management techniques to optimize application performance Manage users with membership control, registration, and authentication capabilities Build real-world data access layers using common design patterns Use custom collections with data source controls Learn the internals of grid controls PLUS—Get code samples on the Web
Comprehensive, complete coverage is given of Windows programming fundamentals. Fully revised for Windows 98, this edition covers the basics, special techniques, the kernel and the printer, data exchange and links, and real applications developed in the text.
Dino Esposito, Andrea Saltarello
Provides information on designing and building effective enterprise solutions, covering such topics as UML, the business layer, the service layer, and the data access layer.
Kerievsky lays the foundation for maximizing the use of design patterns by helping the reader view them in the context of refactorings. He ties together two of the most popular methods in software engineering today--refactoring and design patterns--as he helps the experienced developer create more robust software.
Author Steven Sanderson has seen the ASP.NET MVC Framework mature from the start, so his experience, combined with comprehensive coverage of all the new features, including those in the official MVC development toolkit, offers the clearest understanding of how this exciting new framework can improve your coding efficiency. With this book, you’ll gain invaluable up-to-date knowledge of security, deployment, and interoperability challenges. The ASP.NET MVC 2 Framework introduces a radical high-productivity programming model that promotes cleaner code architecture, test-driven development, and powerful extensibility, combined with all the benefits of ASP.NET 3.5. In this book, the core model-view-controller (MVC) architectural concepts are not simply explained or discussed in isolation, but are demonstrated in action. You’ll work through an extended tutorial to create a working e-commerce web application that combines ASP.NET MVC with C# language features and unit-testing best practices. By gaining this invaluable, practical experience, you’ll discover MVC’s strengths and weaknesses for yourself—and put your best-learned theory into practice. What you’ll learn Gain a solid architectural background to ASP.NET MVC 2, including MVC and REST concepts. Explore the entire ASP.NET MVC Framework and take a detailed look at the official MVC development toolkit. See how it works with test-driven development in action. Capitalize on your existing knowledge quickly and easily through translation and comparison of features in classic ASP.NET to those in ASP.NET MVC. Learn about the latest security and deployment issues, including IIS 7.0. Who this book is for This book is for web developers with a basic knowledge of ASP.NET and C# who want (or need) to start using the ASP.NET MVC 2 Framework. Table of Contents What’s the Big Idea? Your First ASP.NET MVC Application Prerequisites SportsStore: A Real Application SportsStore: Navigation and Shopping Cart SportsStore: Administration and Final Enhancements Overview of ASP.NET MVC Projects URLs and Routing Controllers and Actions Controller Extensibility Views Models and Data Entry User Interface Techniques Ajax and Client Scripting Security and Vulnerability Deployment ASP.NET Platform Features Upgrading and Combining ASP.NET Technologies
“For software developers of all experience levels looking to improve their results, and design and implement domain-driven enterprise applications consistently with the best current state of professional practice, Implementing Domain-Driven Design will impart a treasure trove of knowledge hard won within the DDD and enterprise application architecture communities over the last couple decades.” –Randy Stafford, Architect At-Large, Oracle Coherence Product Development “This book is a must-read for anybody looking to put DDD into practice.” –Udi Dahan, Founder of NServiceBus Implementing Domain-Driven Design presents a top-down approach to understanding domain-driven design (DDD) in a way that fluently connects strategic patterns to fundamental tactical programming tools. Vaughn Vernon couples guided approaches to implementation with modern architectures, highlighting the importance and value of focusing on the business domain while balancing technical considerations. Building on Eric Evans' seminal book, Domain-Driven Design, the author presents practical DDD techniques through examples from familiar domains. Each principle is backed up by realistic Java examples–all applicable to C# developers–and all content is tied together by a single case study: the delivery of a large-scale Scrum-based SaaS system for a multitenant environment. The author takes you far beyond “DDD-lite” approaches that embrace DDD solely as a technical toolset, and shows you how to fully leverage DDD's “strategic design patterns” using Bounded Context, Context Maps, and the Ubiquitous Language. Using these techniques and examples, you can reduce time to market and improve quality, as you build software that is more flexible, more scalable, and more tightly aligned to business goals. Coverage includes Getting started the right way with DDD, so you can rapidly gain value from it Using DDD within diverse architectures, including Hexagonal, SOA, REST, CQRS, Event-Driven, and Fabric/Grid-Based Appropriately designing and applying Entities–and learning when to use Value Objects instead Mastering DDD's powerful new Domain Events technique Designing Repositories for ORM, NoSQL, and other databases
Jez Humble, David Farley
The step-by-step guide to going live with new software releases faster - reducing risk and delivering more value sooner! * *Fast, simple, repeatable techniques for deploying working code to production in hours or days, not months! *Crafting custom processes that get developers from idea to value faster than ever. *Best practices for everything from source code control to dependency management and in-production tracing. *Common obstacles to rapid release - and pragmatic solutions. In too many organizations, build, testing, and deployment processes can take six months or more. That's simply far too long for today's businesses. But it doesn't have to be that way. It's possible to deploy working code to production in hours or days after development work is complete - and Go Live presents comprehensive processes and techniques for doing so. Written by two of the world's most experienced software project leaders, this book demonstrates how to dramatically increase speed while reducing risk and improving code quality at the same time. The authors cover all facets of build, testing, and deployment, including: configuration management, source code control, release planning, auditing, compliance, integration, build automation, and more. They introduce a wide range of advanced techniques, including inproduction monitoring and tracing, dependency management, and the effective use of virtualization. For each area, they explain the issues, show how to mitigate the risks, and present best practices. Throughout, Go Live focuses on powerful opportunities for individual improvement, clearly and simply explaining skills and techniques so they can be used every day on real projects. With this book's help, any development organization can move from idea to release faster -- and deliver far more value, far more rapidly.
Alan Cooper, Robert Reimann, Dave Cronin
While the ideas and principles in the original book remain as relevant as ever, the examples in "About Face 3" are updated to reflect the evolution of the Web. Interaction Design professionals are constantly seeking to ensure that software and software-enabled products are developed with the end-user's goals in mind, that is, to make them more powerful and enjoyable for people who use them. "About Face 3" ensures that these objectives are met with the utmost ease and efficiency. Alan Cooper (Palo Alto, CA) has spent a decade making high-tech products easier to use and less expensive to build - a practice known as "Interaction Design." Cooper is now the leader in this growing field.
.NET 3.5 is Microsoft’s largest development software launch since .NET 2.0 and (unlike .NET 3.0) completely replaces all previous .NET versions. A new version of Visual Studio – Visual Studio ‘Orcas’ is being created for the new Framework together with new versions of both the C# and Visual Basic languages. This book deals with this new C# language and provides developers with a complete treatise on the new technology – explaining the importance of all the new features (lambda expressions, LINQ, ASP.NET AJAX, WPF everywhere) and how they integrate into the framework of the previous .NET versions. It is a comprehensively revised and updated version of the author’s previous award-winning titles.
Do you want to create .NET applications that provide high performance and scalability? Do you want to employ object–oriented programming techniques in a distributed environment? Do you want to maximize the reuse and maintainability of your code? Then this book is for you. In Rockford Lhotka's Expert C# 2008 Business Objects, you'll learn how to use advanced .NET Framework capabilities alongside object-oriented design and programming to create scalable, maintainable object–oriented applications. Better still, this book includes Component-based Scalable Logical Architecture (CSLA) .NET 3.6, a widely-used framework on which you can base your application development. By using the concepts and framework in the book, you can focus more on your business issues and less on technology. Using VS 2008 and C# 3.0, Rockford Lhotka shows you how CSLA .NET 3.6 allows great flexibility in object persistence, so business objects can use virtually any data sources available. The CSLA framework supports 1–, 2– and n–tier models through the concept of mobile objects. This provides the flexibility to optimize performance, scalability, security, and fault tolerance with no changes to code in the UI or business objects. Business objects based on CSLA.NET 3.6 automatically gain many advanced features that simplify the creation of Windows forms, web forms, WPF, WCF, WF, and web services interfaces, and LINQ.
Donald A. Norman
Even the smartest among us can feel inept as we fail to figure our which light switch or oven burner to turn on, or whether to push, pull, or slide a door. The fault, argues this book, lies not in ourselves, but in product design that ignores the needs of users and the principles of cognitive psychology. The problems range from ambiguous and hidden controls to arbitrary relationships between controls and functions, coupled with a lack of feedback or other assistance and unreasonable demands on memorization. The book presents examples aplenty, among them, the VCR, computer, and office telephone, all models of how not to design for people. But good, usable design is possible. The rules are simple: make things visible, exploit natural relationships that couple function and control, and make intelligent use of constraints. The goal: guide the user effortlessly to the right action on the right control at the right time. But the designer must care. The author is a world-famous psychologist and pioneer in the application of cognitive science. His aim is to raise the consciousness of both consumers and designers to the delights of products that are easy to use and understand.