Keep your web applications testable and maintainable in the long run by decoupling it from surrounding infrastructure. Make your test suite fast and reliable again by applying decoupled design patterns.
Starting out with a traditionally structured web application we recognize that it's tied to a particular web framework and database vendor, and that it's hard to test domain logic in isolation. This is true not only for the sandbox application but for many real-world applications as well. It's a danger for the long-term maintainability of such an application, and it will eventually slow down the development of the project to the point where the team begs for a complete rewrite. That's not the direction we choose in this training. Instead of a big rewrite, we refactor the existing code in small steps over multiple iterations, until we have a decoupled core surrounded by a layer of infrastructure code. We then separate the classes into three layers and distinguish Ports and Adapters (from Hexagonal Architecture).
Part 1: Decoupling code by extraction using the Application service, Command, Entity, and Repository pattern.
Part 2: Reorganizing the application into layers: Domain, Application, and Infrastructure.
Test suites usually suffer from the following test smells:
Once you know how to decouple your application's domain logic from surrounding infrastructure, a whole new testing strategy comes within reach. With a decoupled core, leveraging design patterns from day 1 (e.g. application services, entities, domain events), you will be able to execute all the business logic in isolation: without a database, without external services, even without a user interface. You will be able to achieve all of the following:
You can chose to follow either the first day, or both days.
There are seperate tickets for these options.
During the workshop we'll work with a simple web application written in PHP. You'll need at least some experience with the language and an MVC framework like Symfony or Laravel.
Matthias Noback is an experienced web developer, who also provides training and consultancy, while regularly writing about software architecture and object design on his blog (https://matthiasnoback.nl) and in various books, like "Object Design Style Guide" and "Advanced Web Application Architecture".See all workshops ›