video-from-legacy-to-ddd

https://www.youtube.com/watch?v=g0Eoe1DfFPE

At 1:00 #term-strategic-ddd versus #term-tactical-ddd, which he also calls #term-ddd-light

At 4:21 in Rails, often the create or update can have multiple domain services.

At 4:55 in #term-strategic-ddd #term-bounded-contexts he sometimes calls them #term-module.

At 5:08 there is a diagram from Martin Fowler from article-bounded-context-martin-fowler

At 5:45 you can think of a #term-bounded-context as being like a department at a company. Often they map 1:1.

At 8:45 How to keep multiple services up when one service is down. By duplicating the data. This sounds a bit like talk-silence-is-golden, but in that case, the data duplication was specifically for keeping services available. Here that seems to be one of the side-effects.

At 9:10 One #term-module (AKA #term-bounded-context) does not look at another modules database tables.

At 11 not all of those bounded contacts are deserving of #term-ddd-light. Some of them can be done in the standard way. It depends on the complexity of what is being accomplished within the bounded context. Also, if you have a legacy system, some of the contexts might be better candidates to work on first (higher value).

video-from-legacy-to-ddd#escape-from-the-crud-verbs1 At 14:08 Escape from the CRUD verbs video-from-legacy-to-ddd#escape-from-the-crud-verbs1

video-from-legacy-to-ddd#words-the-business-people-use1 2 At 14:35 the words the business people use video-from-legacy-to-ddd#words-the-business-people-use1 2

At 16 even if you have really good speed of work regressions will break customer trust because customers don't understand how things get broken

At 19, if you view the bounded contacts as the unit in testing-concept-test-units-not-classes, then you can move from CRUD to DDD without the test breaking, for example.

video-from-legacy-to-ddd#do-not-use-params-hashes1 At 22:30 don't pass the params/hash everywhere. Some people call the wrapping of that data form-objects. video-from-legacy-to-ddd#do-not-use-params-hashes1

At 23:45 An infinite API. video-from-legacy-to-ddd#call-high-level-apis1Call the high-level API, and not the models directly. video-from-legacy-to-ddd#call-high-level-apis1 (This sounds a lot like calling the API in a well-defined subsystem or code-neighborhoods

At 24:15 use events to communicate between bounded contexts.

video-from-legacy-to-ddd#easy-to-introduce-events-in-same-database Easy to introduce events when in the same database. video-from-legacy-to-ddd#easy-to-introduce-events-in-same-database

At 25:42 to start with he says to use sync as opposed to async.

At 26:57 use CQRS to separate reads and writes. For reads you can continue to use ActiveRecord.

video-from-legacy-to-ddd#duplicate-the-data At 28 do not query the data from other bounded contexts. Duplicate the data in the bounded context. video-from-legacy-to-ddd#duplicate-the-data

At 29 bounded contexts ease testing

At 29:20 read-models for query data and handling events

In a way it's like a cache. It can be reconstituted from the events. It is denormalized.

At 31:30 treat your front end as a bounded context

At 32:30 always be thinking in terms of aggregates

At 32:45 event-source-system

At 34:30 distributed transactions are tricky, but a bounded context makes a great candidate for a microservice eventually. However, to start, use a single database.

Thoughts

Bounded contexts seem a bit like highly cohesive and extremely loosely coupled subsystems with a clearly defined communication pattern (events only). Much like microservices, not reading each-other's data directly is a critical part of ensuring their separation.

Referring Pages

guard-the-edges view-model-example ubiquitous-language

People

person-andrzej-krzywda