Introduction To Domain Modeling Domain Building Blocks Domain Modeling Implementing Effective Domain Models Bonus: Collaboration and Communication Strategies Why Understanding The Domain Is Important Modelling The Domain What Is An API? Creating An API Server Setting Up The Database Models Relationships Between Models Creating The Database System Patching Everything Up Why Scaffolding Is Useful What Is The Layered Architecture? Creating A Layered Architecture Analysis Developing A Basic Customer API Creating A New Customer Converting Database Query Results Updating An Existing Customer Adding Booking Operations Adding The Booking Router Analysis Introduction Creating An Abstract Data Interface Database Implementation Updating The Booking Operation Updating The Booking Router Writing Unit Tests Final Thoughts Introduction Exploratory Questions Organizational Questions Architecture and Design Questions Personal Development Questions Avoid Type Abuse Use Built-In Constructs Use Clear Names Avoid Flags Don't Use Too Many Arguments Use Shallow Nesting Avoid Deeply Nested Conditionals No Wildcard Imports Write Symmetrical Code Only Use Self If Needed Keep Classes Small Tell Don’t Ask Use Meaningful Instance Variables Avoid Redundancy Don't Redefine Programming Concepts BONUS #1: Protocol Segregation BONUS #2: Function Composition