1.1. DESIGN PATTERNS EXPLAINED1.1.1. Origins1.1.2. Necessity1.1.3. Usefulness1.1.4. What They Are Not1.2. DESIGN PRINCIPLES1.2.1. Common Design Principles1.2.1.1. Keep It Simple Stupid (KISS)1.2.1.2. Don't Repeat Yourself (DRY)1.2.1.3. Tell, Don't Ask1.2.1.4. You Ain't Gonna Need It (YAGNI)1.2.1.5. Separation of Concerns (SoC)1.2.2. The S.O.L.I.D. Design Principles1.2.2.1. Single Responsibility Principle (SRP)1.2.2.2. Open-Closed Principle (OCP)1.2.2.3. Liskov Substitution Principle (LSP)1.2.2.4. Interface Segregation Principle (ISP)1.2.2.5. Dependency Inversion Principle (DIP)1.2.2.6. Dependency Injection (DI) and Inversion of Control (IoC)1.3. FOWLER'S ENTERPRISE DESIGN PATTERNS1.3.1. Layering1.3.2. Domain Logic Patterns1.3.2.1. Transaction Script1.3.2.2. Active Record1.3.2.3. Domain Model1.3.3. Object Relational Mapping1.3.3.1. Unit of Work1.3.3.2. Repository1.3.3.3. Data Mapper1.3.3.4. Identity Map1.3.3.5. Lazy Loading1.3.3.6. Query Object1.3.4. Web Presentation Patterns1.3.5. Base, Behavioral, and Structural Patterns1.3.5.1. Null Object Pattern1.3.5.2. Separated Interface1.3.5.3. Gateway1.4. OTHER DESIGN PRACTICES OF NOTE1.4.1. Test-driven Development (TDD)1.4.2. Domain-driven Design (DDD)1.4.3. Behavior-driven Design (BDD)1.5. SUMMARY