Slide 1

Slide 1 text

DDD et CQRS, vers un développement orienté business

Slide 2

Slide 2 text

Domain Driven Development

Slide 3

Slide 3 text

Ceci est la carte du monde

Slide 4

Slide 4 text

Vu par la Chine au 18ème siècle.

Slide 5

Slide 5 text

Les experts du domaine

Slide 6

Slide 6 text

Les experts du code

Slide 7

Slide 7 text

Ubiquitous Language

Slide 8

Slide 8 text

Les contextes

Slide 9

Slide 9 text

Un modèle pour les gouverner tous

Slide 10

Slide 10 text

SOLID

Slide 11

Slide 11 text

SRP

Slide 12

Slide 12 text

Single Responsibility Principle

Slide 13

Slide 13 text

CQRS

Slide 14

Slide 14 text

Command Query Responsibility Segregation

Slide 15

Slide 15 text

"Every method should EITHER be a COMMAND that PERFORMS AN ACTION or a QUERY that RETURNS DATA to the caller, NOT BOTH." Dr. Bertrand Meyer

Slide 16

Slide 16 text

"Poser une question ne devrait pas changer la réponse"

Slide 17

Slide 17 text

"CQRS is simply the creation of two object where there was previously one" Greg Young

Slide 18

Slide 18 text

Write Model class ArticleEntity { public integer id; public string title; public string summary; public string details; public Author author; }

Slide 19

Slide 19 text

Read models class ArticleSummary { public integer id; public string summary; public string authorName; } class ArticleListItem { public integer id; public string title; } class ArticleDetails { public integer id; public string summary; public string details; public string authorName; }

Slide 20

Slide 20 text

Commands class PublishArticleCommand { public integer id; public function constructor(id) { id = id; } }

Slide 21

Slide 21 text

Services class ArticleService { private EntityRepository er; public function constructor(EntityRepository er) { er = er; } public function publishArticle(PublishArticleCommand c) { Article article = er.findById(c.id); article.publish(); } }

Slide 22

Slide 22 text

Events class Article { public integer id; public string title; public ArticleStatus status; public function publish() { status = ArticleStatus.published; raiseEvent(new PublishedArticleEvent(id, status); } }

Slide 23

Slide 23 text

Event Handler class PublishedArticleEventHandler { private Logger logger; private RedisClient redis; public function onPublishedArticle(PublishedArticleEvent $event) { logger.log('Article ' + event.id + ' has been published'); redis.add('article/' + event.id', event.status); } }

Slide 24

Slide 24 text

BASE

Slide 25

Slide 25 text

Basically Available Soft state Eventual consistency

Slide 26

Slide 26 text

Event Sourcing

Slide 27

Slide 27 text

Boris Guéry Twitter : @borisguery proud member of