Skip to content

Latest commit

 

History

History
46 lines (28 loc) · 2.46 KB

README.md

File metadata and controls

46 lines (28 loc) · 2.46 KB

DDD Workshop

Welcome to PensionBee's DDD Workshop! This training programme is designed to increasing confidence writing event-driven, DDD-centric code by bridging the gap between EventStorming and the code one step at a time.

A couple of notes:

  • TypeScript is the language of choice (there's a TypeScript Foundations section at the beginning of the workshop for those who are unfamiliar with TS or need a refresher.)
  • The content is heavily inspired by Anthony Manning-Franklin's Functional Domain Driven Design: Simplified article.
  • Examples and exercises are somewhat specific to the way PensionBee have chosen to implement DDD tactical patterns. Our approach embraces pragmatic software design which is applicable to Object-Oriented Programming (OOP), Functional Programming (FP) and everything in-between.

We genuinely hope you find this workshop as useful and as fun as we've found it. Feel free to use it directly or fork it and modify it to suit your own needs.

Let's get to it...

Context

It’s your first day at SocialBuzz, the next big social media app. Promise.

You’re apprehended by the CEO at the coffee machine, just as you’re on the verge of figuring out how the damn thing works...

Right, here’s what we're going to need from you ASAP:

  1. People need to be able to register an account with their email address and a password.
  2. Users should be able to write short posts, possibly including images, which we’re going to display on the app's home page.
  3. They also need to be able to follow accounts they like.
  4. Ohh, and comments. Being able to comment on a post is important too.

Alright then, chop chop, let’s get to it.

You return to your desk (coffeeless). But you're excited. You feel it's time to try out this "Domain-Driven Design" thing you've heard so much about...

Workshop Overview

01: TypeScript foundations

02: EventStorming

03: Entities

04: Repositories

05: Command handlers

06: Policies

Final