from legacy to ddd (slides for the screencast)
TRANSCRIPT
DDD-lite• app service
• calls 1 or more domain services
• domain service
• takes repo as input
• load aggregate from the repo
• do sth cool
• may use some value objects
• may trigger some domain events
• save aggregate (repo)
UpdateCustomer ==
MoveToNewAddress ChangeEmail
IntroduceNewContactPerson
In one of our projects one request was about 15 domain services
“Update” is always hiding a lot
optionally as microservices partially available
different persistencedata duplication
Context MapHR Project Management Finances
Invoicing
CRUD
DDD-lite
external SaaS
Communication
developer project client
DDD-lite
Draw the Context Mapaka what are the boxes in your application
aka you have more appsThey are potential microservices
Decide which contexts are CRUD and which ones
need more logic (DDD-lite)the ones with CRUD ideally need to publish events anyway
Peopleware the human factor
http://andrzejonsoftware.blogspot.com/2014/01/refactoring-human-factor.html
Mutation testing is the real test coverage!
http://blog.arkency.com/2015/04/why-i-want-to-introduce-mutation-testing-to-the-rails-event-store-gem/
http://blog.arkency.com/2015/06/how-good-are-your-ruby-tests-testing-your-tests-with-mutant/
Test units, not classes!http://andrzejonsoftware.blogspot.com/2015/02/tdding-unit-not-class.html
http://andrzejonsoftware.blogspot.com/2014/04/tdd-and-rails-what-makes-good-unit.html
http://blog.arkency.com/2014/09/unit-tests-vs-class-tests/
Escape from the framework ASAP
http://blog.arkency.com/2015/03/extract-a-service-object-in-any-framework/
Call application services from the framework
Don’t just pass the params/hash everywherehttp://andrzejonsoftware.blogspot.com/2011/12/args-opts-params.html
Use events to communicate between
bounded contextshttps://github.com/arkency/rails_event_store
https://github.com/arkency/ruby_event_store
Event sourcingbuild your aggregates from events
audit log for free(no, it’s not slow, but thanks for asking)
Easier setup of the project when it’s a smaller
pieceUseful when you’re maintaining many projects and need to bugfix them from time to time
Legacy -> DDD books• red book, Vaughn Vernon
• Implementing DDD
• blue book, Eric Evans
• Refactoring, Fowler
• Legacy code, Feathers
• Fearless Refactoring: Rails Controllers