- Vaughn Vernon
- Eric Evans
- Martin Fowler
- Greg Young
- Mathias Verraes
- Mauro Serventi
- Freek Van Der Herten
- Frank de Jonge
- Marco Pivetta @Ocramius
- Matthias Noback
Difference between Commands, Domain Events and Side Effects, how to describe then in code? F.eks Sending an email after a UserRegistered domain event.
Methods in aggregates that trigger events/state change is called Commands, if it is successfull / meets all Domain rules, it raises (Domain) Events. Projections listen to events to build itself, Reactors listens to events to send emails / trigger behaviour outside the domain. Store all events, when replying old events, trigger all event listeners that changes state, but never Reactors/Sagas/ProcessManagers who's purpose is to send trigger new events.
A business rule that crosses aggregates. I would like to avoid allowing adding a Product to a Order if there is no more stock. How can I check "if (!product->isInStock()) inside of Order agregate? (I assume Product is its own aggregate inside the same bounded context)
All communications should be based on Events. when a Products stock is changed, a event should be thrown and picked up in Order agregate, that saves the state in its own projection. Then that data can be used when handling future commands.
Can a aggregate use state from its projections, or is projections only for getting data out of the bounded context?
What is the difference between a Aggregate's state, and a Domain Context Projection?
Can a aggregate use data from the "outside" as long as it's not relevant for the business rules (what if it changes)?
Raising events and throwing exceptions at once?
How should you migrate when different versions of the app is running at the same time? (each copy of the app could use its own projections database and migrate? But use the same event store)
https://spatie.be/docs/laravel-event-sourcing/v5/introduction
- https://www.dddcommunity.org/wp-content/uploads/files/pdf_articles/Vernon_2011_1.pdf
- https://www.dddcommunity.org/wp-content/uploads/files/pdf_articles/Vernon_2011_2.pdf
- https://www.dddcommunity.org/wp-content/uploads/files/pdf_articles/Vernon_2011_3.pdf
- https://github.com/heynickc/awesome-ddd
- https://github.com/sebastianharko/adv-es-cqrs-ddd
- https://dev.to/ludofleury/domain-driven-design-with-php-and-symfony-1bl6
- https://martinfowler.com/bliki/AnemicDomainModel.html
- https://dev.to/franiglesias/ddd-is-not-what-they-told-you-3jem
- https://docs.microsoft.com/en-us/archive/msdn-magazine/2014/october/data-points-a-pattern-for-sharing-data-across-domain-driven-design-bounded-contexts
- https://www.ark.no/boker/Eric-Evans-Domain-Driven-Design-9780321125217
- https://www.packtpub.com/product/hands-on-domain-driven-design-with-net-core/9781788834094
- https://leanpub.com/web-application-architecture
- https://www.youtube.com/playlist?list=PLu8GywxuU1rXQ-pM7zu8HCvml6KiMVuG9 - Eventsourcing playlist
- https://skillsmatter.com/skillscasts/9652-the-elephant-in-the-room#video - Versjoner og migrasjoner av events
- https://www.youtube.com/playlist?list=PLdmKM2vjfLlf9AR6FGu-9dbE7jdGNY9Mc - DDD, CQRS, Event Sourcing, Micro-services
- https://www.youtube.com/channel/UCcpKGt6MVvz7dISXLlMGmag - Explore DDD
- https://www.youtube.com/channel/UC3PGn-hQdbtRiqxZK9XBGqQ - DDD EU
- https://www.youtube.com/channel/UCdbDxsXevDLt7EhRbi2KGjg - Vaughn Vernon
- https://www.youtube.com/c/martinfowlercom - Martin Fowler
- https://www.youtube.com/results?search_query=Greg+Young&sp=EgIQAw%253D%253D - Greg Young
- https://github.com/ludofleury/blackflag
- https://github.com/ferrius/ddd-cqrs-example
- https://github.com/ddd-crew/welcome-to-ddd
- https://github.com/ddd-crew/ddd-starter-modelling-process
Vi trenger en Command Queue for å dispatche synkrone, og asynkrone kommandoer. DomainEvents av fullførte kommandoer.
- Legacy Domain
- Nye UserRegistered(id, name, email) og UserChangedName(id, name) event
- Nye OfficeRegistered(id, name) og OfficeNameChanged(id, name)
- HelfoUserRegistered, HelfoUserUpdated
- PraksisNett Domain
- Aggregates
- Project Aggregate Root
- Participant Aggregate Root
- Snowbox details?
- Events
- ProjectCreated, ProjectUpdated, SnowboxUpdated
- ParticipantAdded
- Projections:
- Projects
- Participants (with User, HPR, Snowbox details)
- Aggregates
- Dispatch Commands
- Collect and store Domain Events
- Restore Aggregate from DomainEvets
- Event Store (id, aggregate root id, domain, event name, payload, timestamp, metadata)
- Projections (subscribed events, last event used)