d’œuvres bibliographique (1,3M) mais également musicale, cinématographique et jeux vidéos. Ce service est utilisé par les bibliothèques, les libraires et e- commerçant avec environ 2M de notices et 4M de requêtes par jour.
the past Events are raised on every state transition that acknowledged the new fact as data in our system Event can reference the command or query identifier that trigger it Events can be ignored, but can’t be retracted or deleted, only a new event can invalidate a previous one Events are named with a past participle There are internal and external event: § Internal Events: the ones we raised and control in our Bounded Context § External Events: the ones from other upstream BC we subscribed to « Something happened that domain experts care about » E.Evans
command can be either success or failure, the result is an event In case of success, state change(s) must have occured somewhere (otherwise nothing happened) Commands are named with a verb, in present tense of infinitive and a nominal group coming from the domain (entity of aggregate type) « A Command is a request made to do something »
specific model Query never change the state of the system (they are idempotent) The query processing is often synchronous The query contains fields with some value to match for or an identifier Query can results in success or failure (not found) and long results can be paginated Queries are named with: “get” something (with identifier as arguments) or “find” something (with values to match as arguments) « A Query is a request asking to retrieve some data about the current state of a system »
Internal Event Domain Logic Interface of the Backend System Each Command will trigger a state transition of the targeted Entity Event State Transition publish subscribe
Event Command Query Internal Event POST GET SSE or Websocket Hexagonal Architecture on the Backend Unidirectional Architecture on the Frontend REST API
the two main reasons Benefits § Simple, powerful and make people productive § Best language for Data Processing § Hosted (JVM / JS) easy interop with common infrastructure (Solr, Kafka, Keycloak, DBs, etc.) § Recruitment
“buy” an existing one or build a closely fitted one? § Example with Solr § Example with Keycloak § Example with Kafka § Example with Scenari (BDD execution lib)
mature as Leiningen Shell scripts as “interface” for the developer. Minimal interface: build.sh / run.sh test.sh / release.sh “Metav” lib for version and release management
mix of trust (hence people), risk and cost. The only question is: can we deliver? For how much? In a polyglot world: platform is first, language is second. Infrastructure choice is costly, hexagonal architecture makes the investment in the domain logic perennial.
and the greatest benefit Immutability makes everything simpler and easier to reason about, always in flow The challenges are in the product and domain design, hence the organization and people, not the technology