This post has originally been written as a part of Proto.Actor official documentation which you can find here.
It was a paid for technical writting gig so the article itself is written by me but the illustrations have been created by Proto.Actor creator Roger Johansson
In this example, we are going to go beyond Proto.Actor and leverage Proto.Remote package in order to enable bidirectional communication between different actors in a client to server fashion.
These actors might be living inside of separate actor systems partitioned by a network (potentially located on different machines) and as a result of this, we…
It is very hard to reason about life, death, nature of existence, and reality itself. Eternity/Infinity are hard concepts to grasp. Even all religions have the promise of eternity (once you die) and most of them claim that “God” himself is eternal. For an ordinary human, it is really hard to grasp those concepts. Or is it …
Most of the difficulties related to that lie in the fact that w most of the time we are looking at it from the wrong frame of reference. the wrong perspective.
We are looking at things in terms of is/isn’t, left/right, good/evil…
Design patterns are very useful things in general and they pop up a lot if you are applying DDD in an OOP context (If you’re there you are probably already applying Tactical DDD patterns).
One principle I want to emphasize here because I see so many violations of it, is the following: “Don’t use pattern names when implementing a pattern”.
It’s amazing how people keep missing the point.
Applying this principle is actually very helpful in double checking if you are applying the right pattern to the right thing. What do I mean? If you are finding it hard not…
Paradigm Shift — a term coined by Thomas Kuhn (The structure of scientific revolutions)
people work within boundaries with not much critical thinking going on
Things that cannot be explained using current models
When anomalies become more and more frequent, there comes Doubt on the correctness of current models.
This leads to Revolutionary Science
There is a crisis in how we deal with data
So much investment but not many proven results (there are exceptions mostly with big players)
The industry as a whole generally fails — specifically in transformational measures (treating data as…
Everything is broken down:
Books -> Chapters
Worlds -> Countries
Software -> Services
5 virtues of modularity
How do these apply in the real world:
The illusion of Boundaries (overemphasized a lot) — the world does not work that way (or even software)
4 languages in Switzerland
West of Switzerland speaks French
-> Understanding language better is key to understand the boundaries better…
Projections since 2009…
CQRS — split reading and writing (this brought opportunities)
Mostly a logical separation (not a physical one) — that’s not what the pattern is about (but you can do it)
Event Sourcing + DDD — apply it on a bounded context level
You need to know the requirements from the consumers BEFORE building projections
Event Store is a collection of streams (which are in turn collections/sequences of heterogenous events partitioned by name or key)
Aggregate instance has its own stream
Each event appears at a certain position/offset (sequence) in an event stream (a monotonically incremented…
There are well-established patterns for dealing with conflicting updates in traditional data stores (Relational, Key-value) but how do you deal with conflicts when you have event streams?
Event sourcing is not a top level architecture it is a tactical pattern, (unlike EDA)
Event stores act similar to Escrow.
The level of granularity for concurrency is the event sequence
This means I want to write this sequence of events IFF there have been no changes (version / sequence is still the same for this stream / aggregate)
But sometimes you don’t care (can use Expected version ANY if you have no…
Experience report really.
An editorial system for scientific publishing: Submit -> Review -> Revise -> Accept -> Publish, etc. workflows
A big part of this process is in detecting fraud
Needed a lot of different views for a lot of different types of users, eg. authors, journal editors, peer reviewers …
Needed a lot of metadata about these users (who are they)
Thus, Event Sourced arch was picked.
Needed the fact that the audit log WAS the actual history of the state of entities.
Used jvm, kotlin, http4k, PostgreSQL
Mistakes we made
Seduced by eventual consistency
They made an http…
Keynote — Udi Dahan
Event sourcing intro (the natural order of things — as he put it XD) — event sourcing from first principles probably
Event Sourcing all of the things (excited about it) — The best thing since sliced bread — Every technology goes through this phase
aka Gartner Hype Cycle
It is a lot harder than it looks initially…
Main novelty ES brings in:
ES is a collection of patterns based on the idea of persisting the full history of a domain as a seq of events, rather than persisting just the current state
Domain Model pattern
While staring out of the window of an airbus A319–100, traveling to Amsterdam for “DDD / Event Sourcing Europe”, I had a sudden rush of inspiration and decided to try and scribble a quick blog post.
Here goes nothing…
When talking about software, we often hear the term “architecture” mentioned a lot. That inevitably reminds us of buildings and construction. While this may be true up to some extent, there are a lot of discrepancies between the approaches we take towards architecting a building (a house for example) and a typical web application software system. …