While explaining the Event Sourcing, bank account balance calculation is a common starting point. I claim that even though it sounds right, then it’s not the best example to show at first. In this post, I explain the ES basics and first set of considerations that may arise when starting to evaluate it.
Architektura 1473 dni, 6 godzin, 24 minuty temu 86 źrodło rozwiń
CQRS is a simple pattern that strictly segregates the responsibility of handling command input into an autonomous system from the responsibility of handling side-effect-free query/read access on the same system. If you are familiar with Domain-Driven Design, you’ve most likely heard about, Command-Query Responsibility Segregation (CQRS). Though the CQRS pattern is well-known, there are still a lot of misconceptions around this pattern, especially when it comes to applying it in real-world software proje...
Sztuka programowania 1689 dni, 7 godzin, 42 minuty temu 100 źrodło rozwiń
We live in a world of dynamically changing technologies. New ways of architecturing our solutions, new frameworks and libraries seem to appear on almost daily basis. But good software engineering is not about fancy frameworks and solutions aggressively promoted by their vendors. It is not about doing something because Netflix or Google did it. It is about taking well-thought-out decisions based on facts and knowledge. That’s why it is important to be familiar basic architectural concepts like CQRS. It is...
Architektura 2046 dni, 7 godzin, 21 minut temu 234 źrodło rozwiń
Cześć, jako że aktualnie piszę aplikację na boku w której wykorzystuje CQRS i Event Sourcing chciałbym podzielić się z pewnym problemem który zabrał mi trochę czasu, zanim znalazłem rozwiązanie i zrozumiałem w czym tkwił problem. Może komuś innemu zaoszczędzi to trochę czasu, lub po prostu post ten będzie dobrą okazją by dowiedzieć się czegoś nowego.Background sytuacji W aplikacji, w jednym z...
Sztuka programowania 2245 dni, 6 godzin, 7 minut temu 99 źrodło rozwiń
Ten wpis pierwotnie miał traktować o zasadności wprowadzenia CQRS do aplikacji opertej o mikroserwisy. Jednak przed rozpoczęciem właściwej częsci artykułu chciałem, abyśmy mieli spójną definicję tego konceptu. Trochę się rozpisałem… i uznałem, że warto wynieść ten tekst do osobnej publikacji, którą łatwo będzie zalinkować w razie potrzeby. Dlaczego? W moim odczuciu wielu programistów mylnie utożsamia ten wzorzec (sic!) z jakimś wielkim molochem klasy Enteprise, wymagającym zaawansowanej infrastruktury, ...
Architektura 2354 dni, 6 godzin, 6 minut temu 239 źrodło rozwiń
I think its no secret that more and more development teams are trying to take more of a micro service oriented approach (and for all the good reasons). With the power that cloud providers give plus the benefit of container (Docker and Kubernetes) I think it is inevitable that micro services will become a standard. Of course this approach is not problem proof but it allows us to move some of the monolith type application issues somewhere else where we have more flexibility
Architektura 2411 dni, 13 minut temu 110 źrodło rozwiń
Persystencja zawsze budzi wiele emocji i skrajnych opinii. W tym artykule pokażemy, jakie opcje są do wyboru przy persystowaniu agregatów z DDD i jak pragmatycznie do nich podejść. Przejdziemy kolejno przez bezpośredni zapis agregatów, robienie Snapshotów, tworzenie osobnego modelu danych na podstawie zdarzeń, a na koniec dotrzemy do Event Sourcingu.
Sztuka programowania 2488 dni, 7 godzin, 12 minut temu 283 źrodło rozwiń
Wpis, w którym próbuję przekonać siebie i innych, że ciągle jeszcze bloguję. Przedstawiam co u mnie słychać i referuję swoje postępy na moim Githubie. Event Sourcing, CQRS, Open Source to słowa klucze.
Architektura 2676 dni, 8 godzin, 36 minut temu 150 źrodło rozwiń
A więc dalej modelujesz swoją domenę. Który agregat powinien odpowiadać za obsłużenie danego zdarzenia? Do którego agregatu przynależy dane zdarzenie? Zapraszam do lektury
Architektura 2781 dni, 6 godzin, 40 minut temu 42 źrodło rozwiń
A więc modelujesz swoją domenę. W Twoim modelu masz agregat, który okresowo jest niezwykle obciążany przez użytkowników systemu. W jaki sposób do tego nie dopuścić? Jak przearanżować model tak, aby łatwiej obsługiwał takie sytuacje? Zapraszam do lektury #TopDomainModel
Architektura 2786 dni, 18 godzin, 52 minuty temu 101 źrodło rozwiń
Zapraszam do polemiki z zarzutami wobec event sourcingu. Jak w każdym podejściu, odpowiednio zastosowane, w otoczeniu dobrze dobranych komponentów pozwala na wiele. Złe wybory narzędzi powodują zupełnie odwrotny efekt.
Architektura 2833 dni, 5 godzin, 29 minut temu 63 źrodło rozwiń
To be honest, I thought that my previous post would be the last in the CQRS/ES series, but I forgot to discuss one more thing related to that topic. Many developers don’t know how we should handle the following scenario in our systems: „During the creation of user’s new account I would like to verify rather a username is unique in the whole database. Should I use Event Store or Read Database for a query? Where should I check that?” Seriously, that question is one of the most popular topics connected ...
Sztuka programowania 2981 dni, 21 godzin, 8 minut temu 156 źrodło rozwiń
As I announced in the last part, our CQRS/ES journey is almost finished! But before it happens we need to take care of read side of our application. However, before we move forward to the implementation, it’s worthwhile to explain why do we need a read side? After all, we have an excellent data source called Event Store which allows us to reconstruct every domain object in our system. What’s, even more awesome is the fact that we can „time travel” in our domain by not applying all events in our domain ob...
Architektura 2991 dni, 48 minut temu 154 źrodło rozwiń
All right, after a few short breaks, I’m finally ready to continue our journey, during which we discover Command Query Responsibility Segregation pattern along with Event Sourcing. In a previous part, we discovered the role of events and ES in our application and to be honest we’re almost done! But before that, we need to focus a little bit on transporting our commands and events. That’s why today’s post will be dedicated the buses. Okay, let’s start! RabbitMQ and EasyNetQ To accomplish our task, we n...
Architektura 3002 dni, 19 godzin, 45 minut temu 280 źrodło rozwiń
So far we learned about the whole concept of Command Query Responsibility Segregation (CQRS) and Event Sourcing. We also implemented domain objects which Aggregate consists of, and we expressed user’s intentions using Commands executed by Command Handlers. Today we’ll discover the role of events, and more importantly, we’ll introduce Event Sourcing to our Awesome Calendar project. One more thing. As I mentioned in one of the previous parts, I’m currently working on this project wich means that some code ...
Architektura 3044 dni, 8 godzin, 16 minut temu 147 źrodło rozwiń
In the first part of our journey, we became familiar with CQRS and Event Sourcing. In this episode, we’re going to implement a few classes in our brand new system. Before we start let’s discuss a little bit about a business problem that we’ll try to model. At first, I thought about something very easy like a bookstore which would allow users only to buy some books. But that would be boring, wouldn’t be? By chance, a few weeks ago I received the kind of interesting recruitment objective from some company....
Architektura 3067 dni, 22 godziny, 39 minut temu 150 źrodło rozwiń
Jakiś czas temu zapowiadałem na blogu serię postów poświęconą tematyce CQRS oraz Event Sourcing-u. Niniejszym postem rozpoczynamy naszą podróż badawczą! Dlaczego w ogóle zajmiemy się tym tematem? Otóż sam koncept poznałem stosunkowo niedawno i pomijając wady i zalety tego rozwiązania zawsze spotykałem się ze stwierdzeniem, że implementacja CQRS jest banalna i nie ma nad czym się tu zastanawiać. Już teraz mogę Wam zdradzić, że nie zgadzam się z tą tezą, ale do kodu przejdziemy od następnego „odcinka”. Tu ...
Architektura 3091 dni, 8 godzin, 17 minut temu 345 źrodło rozwiń