Recipes for Decoupling

Recipes for Decoupling

Matthias Noback
This is a sample of the book's content.Buy on Leanpub

Table of Contents

Recipes for Decoupling

  • Introduction
    • Coupling, Why is it Bad?
    • Decoupling, How to Do it Efficiently?
    • Objection
    • What’s Special About This Book?
    • How to Stay Decoupled?
    • Who Should Read This Book?
    • Overview of the Contents
    • About the Author
    • Changelog
    • 10 May 2022
    • 17 May 2022
    • 26 May 2022
    • 31 May 2022
    • 7 June 2022
    • 15 June 2022
    • 24 June 2022
  • 1 Creating Custom Rules for PHPStan
    • Introduction
    • Analyzing Code with PHPStan
    • Catching Specific Node Types
    • Adding Automated Tests for a PHPStan Rule
    • Deriving Types from the Current Scope
    • Putting a Node in Context
    • Generalizing a Rule
    • Conclusion
  • 2 Web Frameworks
    • Introduction
    • Controllers
    • Show How the Response is Created
    • Only Use Constructor Injection for Dependencies
    • Make Every Step Explicit
    • Controllers Have No Parent Class
    • Every Action Has its Own Controller Class
    • Should We Use an HTTP Abstraction Library?
    • Rules for Decoupled Controllers
    • Forbidden Parent Classes
    • Allowing Only Parameters of a Certain Type
    • Enforcing Return Types
    • One Action Per Controller
    • Views
    • Pass All the Data That the Template Needs
    • Don’t Pass Objects That Don’t Belong in a Template
    • Rules for Decoupled Views
    • Don’t Use Certain Global Variables in a Template
    • Don’t Use Certain Functions in a Template
    • Don’t Pass Entities to a Template
    • Conclusion
  • 3 CLI Frameworks
    • Introduction
    • Input
    • Collect Input First
    • Jump to a Service
    • Output
    • Using an Observer for Showing Output
    • Generalizing the Solution with Event Dispatching
    • Turn the Command Class Itself Into an Event Subscriber
    • Controllers Should Call Framework-agnostic Services
    • Rules for Decoupling
    • Use InputInterface and OutputInterface Only in Command Classes
  • 4 Form Validation
    • Introduction
    • Form Validation
    • Protecting Data Inside the Model
    • Delegating Protection to Value Objects
    • Removing Duplicate Validation Logic
    • Defining an Explicit Shape for the Input Data
    • Rules for Decoupling
    • Don’t Pass a Single Array of Data to create()
    • Enforcing the Use of Closure-based Form Validation
    • Conclusion
  • 5 ORMs and the Database
    • Introduction
    • Repository: an Abstraction for Persistence
    • Trying an Alternative Implementation
    • Application-generated IDs
    • PHPStan Rule: Disallow Auto-incrementing Model IDs
    • Defining Our Own Object API
    • Custom Mapping Code
    • PHPStan Rule: Only Allow Calls to fromDatabaseRecord() from Repository Classes
    • No Magic Persistence of Related Objects
    • Using Aggregate Design Rules
    • Limiting Changes to One Entity
    • Introducing View Models
    • Provide Read Models When the Framework Needs Your Data
    • Use Domain Events Instead of Persistence Events
    • PHPStan Rule: Forbidden Parameter Types
    • Conclusion
  • 6 Test Frameworks
    • Introduction
    • Use Only the Most Basic Features of a Test Framework
    • Declare Test Dependencies Explicitly
    • PHPStan Rule: Don’t Allow PHPUnit Extensions
    • PHPStan Rule: Don’t Allow Class-level Set-up and Tear-down Functions
    • Assertions
    • Write Tests in Plain Code
    • Handwritten Test Doubles
    • PHPStan Rule: Don’t Generate Mocks
    • Conclusion
  • 7 Conclusion
  • 8 The End of the Book
Recipes for Decoupling/overview

Recipes for Decoupling

course_overview

count_chapters
begin_reading
download
p_implied_book_part_name

Recipes for Decoupling9 chapters

Begin ›
  1. Introduction

  2. 1 Creating Custom Rules for PHPStan

  3. 2 Web Frameworks

  4. 3 CLI Frameworks

  5. 4 Form Validation

  6. 5 ORMs and the Database

  7. 6 Test Frameworks

  8. 7 Conclusion

  9. 8 The End of the Book