Back Button PHP

Commands and Domain Events

As you advance in your career, you'll quickly fall into the "sequential tasks" trap. "I need to do these ten things when a user signs up.... but I have no idea where to place this logic." Many times, we give up and simply throw it in the controller. But is that the best place? Might there be a better way (when appropriate) to structure our applications? Sure! Let me show you.

Advanced
Difficulty
7 episodes
1:15:08 hrs
Start Series
This series has been archived. A series is marked as archived when the content is no longer up-to-date or relevant to most viewers.
  • Latest Episode: Extracting a Composer Package

  • Like this series? Share the love!

  • Episode 1 Run Time 7:11

    In the opening episode, we'll review the "sequential tasks" dilemma, while introducing the concept of command objects.

  • Episode 2 Run Time 8:34

    Now that we have our first command object, we next need to calculate the appropriate handler class, which will delegate, as needed. Let's tackle that in this episode. Go sports!

  • Episode 3 Run Time 15:32

    So we've successfully translated a command into its associated handler class. In this lesson, we'll delegate, as needed, to post the job listing - while raising domain events in the process.

  • Episode 4 Run Time 15:00

    So, we've learned how to dispatch our custom events, but how do we go about listening for them? Well, in this lesson, I'll show you a really nice and clean way to go about it! Let's do this.

  • Episode 5 Run Time 7:18

    Now that our base is essentially complete, let's go through the process of, using our job site example, marking jobs as filled, or archived.

  • Episode 6 Run Time 12:23

    In this lesson, we'll extend the functionality of the command bus by adding a validation decorator, while also reviewing an implementation that uses simple inheritance.

  • Episode 7 Run Time 9:10

    Now that our review of commands and domain events is complete, let's extract a Composer package, so that we can reuse this logic across all new projects! See the completed package on GitHub!