Slide 1

Slide 1 text

COMMAND QUERY FRAMEWORK EKO KURNIAWAN KHANNEDY

Slide 2

Slide 2 text

WHAT IS CQRS? COMMAND QUERY FRAMEWORK

Slide 3

Slide 3 text

COMMAND QUERY FRAMEWORK COMMAND QUERY RESPONSIBILITY SEGREGATION CUSTOMER SERVICE CUSTOMER READ SERVICE CUSTOMER WRITE SERVICE

Slide 4

Slide 4 text

WHY CQRS? COMMAND QUERY FRAMEWORK

Slide 5

Slide 5 text

COMMAND QUERY FRAMEWORK SLOW READ RESPONSE

Slide 6

Slide 6 text

COMMAND QUERY FRAMEWORK SEARCH COMBINATIONS (1)

Slide 7

Slide 7 text

COMMAND QUERY FRAMEWORK SEARCH COMBINATIONS (2) ▸ Order Id ▸ Order Id + Order Date ▸ Order Id + Order Date + Fraud Case Date ▸ Order Id + Order Date + Fraud Case Description ▸ Order Id + Order Date + Fraud Case Description + Risk ▸ Order Id + Order Date + Fraud Case Description + Risk + Task ▸ Order Id + Fraud Case Date ▸ …

Slide 8

Slide 8 text

OUR SOLUTION COMMAND QUERY FRAMEWORK

Slide 9

Slide 9 text

COMMAND QUERY FRAMEWORK PERSISTENCE DATABASE + SEARCH ENGINE CLIENT READ WRITE SOLR MONGODB / POSTGRESQL

Slide 10

Slide 10 text

COMMAND QUERY FRAMEWORK READ TO SOLR ▸ Fast search by default. ▸ Only return Id from Solr, and get the content from MongoDB or PostgreSQL.

Slide 11

Slide 11 text

COMMAND QUERY FRAMEWORK WRITE TO MONGODB / POSTGRESQL ▸ Fast write, because we don’t need to create many indexes anymore. ▸ Just findById() or findByIds(List)

Slide 12

Slide 12 text

BUT… COMMAND QUERY FRAMEWORK

Slide 13

Slide 13 text

COMMAND QUERY FRAMEWORK WE DON’T WANT TO CREATE MULTIPLE ENTITY/MODEL CLASS CUSTOMER MONGO / CUSTOMER POSTGRESQL CUSTOMER SOLR CUSTOMER MONGO SERVICE / CUSTOMER POSTGRESQL SERVICE CUSTOMER SOLR SERVICE

Slide 14

Slide 14 text

COMMAND QUERY FRAMEWORK JUST CREATE ONE ENTITY/MODEL CLASS CUSTOMER CUSTOMER SERVICE MONGODB / POSTGRESQL SOLR

Slide 15

Slide 15 text

COMMAND QUERY FRAMEWORK COMMAND QUERY FRAMEWORK

Slide 16

Slide 16 text

COMMAND QUERY FRAMEWORK WHAT IS COMMAND QUERY FRAMEWORK? ▸ Small library that read all entity classes, and magically transform its to Solr data structures. ▸ Pluggable using @Annotation. ▸ For now, only support Apache Solr. ▸ ElasticSearch will be supported soon (waiting for GDN approval) :D

Slide 17

Slide 17 text

COMMAND QUERY FRAMEWORK WHO IS USING IT? ▸ X-Fraud 2.0

Slide 18

Slide 18 text

ENTITY MAPPING COMMAND QUERY FRAMEWORK

Slide 19

Slide 19 text

COMMAND QUERY FRAMEWORK COMMAND QUERY ANNOTATIONS ▸ @QueryDocument for Entity Class. ▸ @QueryId for ID attribute. ▸ @QueryEmbedded for embed nested object. ▸ @QueryEmbeddedCollection for embed collections or array. ▸ @QueryIgnore if we don’t care the attribute. ▸ @QueryPattern for date format pattern.

Slide 20

Slide 20 text

COMMAND QUERY FRAMEWORK @QUERYDOCUMENT

Slide 21

Slide 21 text

COMMAND QUERY FRAMEWORK SUPPORT SUPPER CLASS

Slide 22

Slide 22 text

COMMAND QUERY FRAMEWORK @QUERYEMBEDDED (1) - FROM CLASSES

Slide 23

Slide 23 text

COMMAND QUERY FRAMEWORK @QUERYEMBEDDED (2) - TO SOLR

Slide 24

Slide 24 text

COMMAND QUERY FRAMEWORK @QUERYEMBEDDEDCOLLECTION (1) - FROM CLASSES

Slide 25

Slide 25 text

COMMAND QUERY FRAMEWORK @QUERYEMBEDDEDCOLLECTION (2) - TO SOLR

Slide 26

Slide 26 text

COMMAND QUERY FRAMEWORK @QUERYPATTERN (1) FOR DATE, TIME OR TIMESTAMP

Slide 27

Slide 27 text

COMMAND QUERY FRAMEWORK @QUERYPATTERN (2) TIME RESOLUTION

Slide 28

Slide 28 text

COMMAND QUERY FRAMEWORK BE CAREFUL WITH INFINITE LOOP ATTRIBUTE (1) PARENT CHILD Children Grandchildren

Slide 29

Slide 29 text

COMMAND QUERY FRAMEWORK BE CAREFUL WITH INFINITE LOOP ATTRIBUTE (2)

Slide 30

Slide 30 text

COMMAND QUERY FRAMEWORK BE CAREFUL WITH INFINITE LOOP ATTRIBUTE (3) - PLEASE IGNORE IT

Slide 31

Slide 31 text

SEARCH QUERY COMMAND QUERY FRAMEWORK

Slide 32

Slide 32 text

COMMAND QUERY FRAMEWORK QUERIES CLASS

Slide 33

Slide 33 text

COMMAND QUERY FRAMEWORK HOW TO USE QUERIES CLASS

Slide 34

Slide 34 text

COMMAND QUERY FRAMEWORK QUERIES RESPONSE

Slide 35

Slide 35 text

OTHER FEATURES COMMAND QUERY FRAMEWORK

Slide 36

Slide 36 text

COMMAND QUERY FRAMEWORK ATTRIBUTES GENERATOR, GOOD FOR AUTOCOMPLETE

Slide 37

Slide 37 text

COMMAND QUERY FRAMEWORK FIELD NAME FORMATTER (1)

Slide 38

Slide 38 text

COMMAND QUERY FRAMEWORK FIELD NAME FORMATTER (2) - CHOOSE WHAT YOU WANT

Slide 39

Slide 39 text

LIMITATION COMMAND QUERY FRAMEWORK

Slide 40

Slide 40 text

COMMAND QUERY FRAMEWORK CURRENT LIMITATION ▸ We only support Apache Solr, not support ElasticSearch. ▸ We only support AND query operation. ▸ Minimum Java Version is 8.

Slide 41

Slide 41 text

COMMAND QUERY FRAMEWORK PLEASE CONTRIBUTE ▸ https://stash.gdn-app.com/ ▸ Project: Sandbox ▸ Repository: Command Query

Slide 42

Slide 42 text

THANKS

Slide 43

Slide 43 text

COMMAND QUERY FRAMEWORK REFERENCES ▸ http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis-event- sourcing-agh/ ▸ http://martinfowler.com/bliki/CQRS.html ▸ http://tenmilesquare.com/command-query-responsibility-separation-with-a- relational-database-and-solr/