Once you try Domain-driven design (
https://en.wikipedia.org/wiki/Domain-driven_design), you will never design software in the same way again. We will start by discussing what projects to use DDD on, what it means to use a ubiquitous language, how to encapsulate logic in value objects, and use bounded contexts, entities, and aggregate roots to manage state and protect invariants. We will also cover more-advanced topics in the DDD world, such as event sourcing and command query responsibility segregation.
Andrew has presented on this topic at php[tek], True North PHP, and will be presenting again at PHP Serbia in May.