Przygody z EventSourcing i CQRS

Slides:



Advertisements
Podobne prezentacje
Graficzny klient SVN graficzny klient SVN integrujący się z powłoką systemu dostępny tylko dla systemu Windows - do pobrania z
Advertisements

Architektura SAP R/3 Wybrane zagadnienia.
Projektowanie systemowe
Decyzje projektowe w .NET Framework
Praca z plikami tekstowymi
WEB SERVICE Stefan Rutkowski.
ADAM Active Directory w trybie aplikacyjnym
OLAP budowa aplikacji analitycznych w MS SQL 2000 i Yukon
©Ian Sommerville 2000 Software Engineering, 6th edition. Chapter 28Slide 1 Restrukturyzacja oprogramowania l Reorganizowanie i modyfikowanie istniejącego.
Technologie XML Mgr inż. Michał Jaros Technologie XML wykład 3.
EXtreme Programming » Magdalena Tchorzewska.
(Content Management System)
zespół JPEG w składzie:
Metody autoryzacji użytkowników wymaga integracji z systemem operacyjnym nie wymaga logowania mała pewność mechanizmu wymaga logowania duża pewność mechanizmu.
Obsługa plików csv Do odczytu z pliku csv można użyć następującego kodu: $fp = fopen ("strony.csv","r"); $num = 0; while ($data = fgetcsv ($fp, 1000, ";"))
Zaawansowane techniki obiektowe
Wykład 8 Wojciech Pieprzyca
Information Bridge Framework platforma integracji Microsoft Office 2003 z aplikacjami Line of Business Krzysztof Michalski10/01/2005.
Quartz. Wstęp Framework stworzony do budowy aplikacji biznesowych Metodologia która łączy prototypowanie, modelowanie wizualne oraz automatyzację budowy.
Wzorce projektowe w J2EE
Praca Inżynierska „Analiza i projekt aplikacji informatycznej do wspomagania wybranych zadań ośrodków sportowych” Dyplomant: Marcin Iwanicki Promotor:
Bezpieczeństwo baz danych
trójwymiarowy labirynt z fizyką i przeszkodami
Wykład 2 Cykl życia systemu informacyjnego
System Użytkowników Wirtualnych
Continuous Integration
Wirtualna baza SQL zgodna z SQL Server SQL as a Service
Technologie tworzenia aplikacji internetowych Wykład 3
Wsparcie pracy grupowej systemem Workflow
Magdalena kurzyńska Sławomir Kwasiborski
Architektura aplikacji wielowątkowych Jakub Binkowski.
Refaktoryzacja Robert Pająk.
Warsztaty programowania w języku Python
Model – View – View Model
Aplikacje bazodanowe ADO.NET PHP i MySQL
Enterprise Architecture Patterns
Systemy Zarządzania Bazami Danych Laboratorium 05 Widoki i eksport tabel/widoków 1.
Komendy SQL do pracy z tabelami i bazami
Modelowanie obiektowe Diagramy UML – diagram przypadków użycia
Skalowanie aplikacji JPA na przykładzie Oracle TopLink Grid
Service Oriented Architecture
Domain Specific Language Mac Michał Programujący architekt, konsultant.
Responsywne aplikacje w Windows 8 i.NET 4.5 Jakub Binkowski.
Walidacja danych alina suchomska.
Doskonalenie podstawą sukcesu organizacji Doskonalenie podstawą sukcesu organizacji Prof. nadzw. PG Dr hab. inż. Piotr Grudowski Politechnika Gdańska Wydział.
Jak aplikować w Programie Europa dla Obywateli Jak aplikować w Programie Europa dla Obywateli.
ŁUKASZ DZWONKOWSKI Modele zwinne i ekstremalne. Podejście tradycyjne
Entity Framework worth it or not?
OOP, Desing Patterns … and more Michał Dubel
Jak powstaje chmura? Maciej Nabożny, Miłosz Zdybał
 Dla studentów, którzy posiadają dostęp do msdn AA dostępny jest Windows Server 2008 Elms.pjwstk.edu.pl.
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
Temat: Porównanie technologii php,c# oraz javascript na przykładzie webaplikacji typu społecznościowy agregator treści Autor: Wojciech Ślawski.
Architektura Rafał Hryniów. Architektura Wizja projektu systemu, którą dzielą twórcy Struktura komponentów systemu, ich powiązań oraz zasad i reguł określających.
Politechnika Warszawska Wydział Elektryczny Kierunek: Informatyka stosowana Praca dyplomowa inżynierska Aplikacja do kontroli wydajności produkcji w.
Projektowanie skalowalnych architektur z wykorzystaniem zaawansowanych technik DDD Michał Mac macmichal.pl.
Modelowanie Procesów Biznesowych. Dlaczego modelujemy procesy biznesowe? Żeby je zrozumieć Żeby je wizualizować - zobrazować.
TWOJA CYFROWA PRZYSZŁOŚĆ. JUŻ DZISIAJ. Marcin Parczewski © 2016 Software AG. All rights reserved. For internal use only.
Warszawa 27 Luty 2014 Analiza implementacyjna usługi VoIP dla zastosowań korporacyjnych Wykonał: Michał Boczek Promotor: dr inż. Dariusz Chaładyniak.
GLOBE OBSERVER: CLOUD CHALLENGE. Międzynarodowy dzień centrów i muzeów nauki: Globalny eksperyment Jak nazywa się projekt? Wyzwanie chmur – Globe Observer.
Optymalizacja zapytań w SQL Server
Zaawansowane techniki obiektowe
Wzorzec MVC na przykładzie CakePHP
Programowanie Obiektowe – Wykład 9
Łukasz Gąsior wrocnet – 16/02/2016
Zarządzanie projektami
Projekt modułu BANK INTERNETOWY Moduł funkcji banku
Podstawy sieci komputerowych
Strukturalny język zapytań SQL - historia
Zaawansowane techniki obiektowe
Zapis prezentacji:

Przygody z EventSourcing i CQRS Czyli jak to się w praktyce robi w świecie dotNet Core

O mnie oskar_at_net oskar-dudycz.pl linkedin.com/in/oskardudycz github.com/oskardudycz

Agenda CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu. Czemu CQRS to krok wstecz i dwa do przodu. Domain Driven Development na ratunek. Magia event sourcingu. dotNet Core nie taki straszny. Marten + MediatR = Teoria w praktyce. Podsumowanie.

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu Controller Service DB

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu Controller Service DB Repository ORM

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu UserController UserService Users Table Controller Service DB Repository ORM UserRepository User DbSet

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu Dodanie Użytkownika: Wołamy UserController Create. UserController wywołuje User Service Create. UserService wywołuje UserRepository Create. UserRepository wywołuje Add na DbSet. EntityFramework zapisuje zmiany w bazie.

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu UserController UserService Users Table Controller Service DB UserDTO Repository ORM UserEntity Mapping UserRepository User DbSet

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu AccountController AccountService Account Table Controller Service DB AccountDTO Repository ORM AccountEntity Mapping AccountRepository Account DbSet

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu A co gdy przy dodaniu ma się dodać od razu jego konto? A co gdy w ramach promocji ma pójść od razu 50zł przelewu na jego konto? A co gdy jeszcze ma pójść mail do niego z informacją aktywującą?

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu Typowe reakcje: Co ten klient znowu wymyślił? Gdzie ja to upchnę? Czemu on nie rozumie, że w tej architekturze się to nie da? Przecież kod będzie brzydko wyglądał…

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu Jak inni radzą sobie z układaniem tych klocków?

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu Amazon ma drony

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu Inni mają gorzej

CRUDY na pudy, czyli parę słów o dyskomforcie w programowaniu Przesadzam? Dodajmy do tego: Skomplikowaną zależności relacji (relacje wiele do wielu) Współgranie modelu odczytu z zapisem Migracje schematu bazy oraz samych danych Problemy z wydajnością gdy używamy tego samego wielkiego modelu danych

Czemu CQRS to krok wstecz i dwa do przodu Command Query Responsibility Segregation

Czemu CQRS to krok wstecz i dwa do przodu Command Query Responsibility Segregation

Czemu CQRS to krok wstecz i dwa do przodu Command Query

Czemu CQRS to krok wstecz i dwa do przodu Command „Change the state of a system but do not return a value.” Martin Fowler

Czemu CQRS to krok wstecz i dwa do przodu Query „Return a result and do not change the observable state of the system (are free of side effects).” Martin Fowler

Czemu CQRS to krok wstecz i dwa do przodu Źródło: https://martinfowler.com/bliki/CQRS.html

Czemu CQRS to krok wstecz i dwa do przodu AccountController AccountService Account Table Controller Service DB AccountDTO Repository ORM AccountEntity Mapping AccountRepository Account DbSet

Czemu CQRS to krok wstecz i dwa do przodu UserController AddUserCommandHandler User Table Controller Command handler DB AddUserCommand ORM UserWriteModel User DbSet

Czemu CQRS to krok wstecz i dwa do przodu

Czemu CQRS to krok wstecz i dwa do przodu UserController AddUserCommandHandler User Table Account Table Controller Command handler DB DB AddUserCommand ORM UserWriteModel AccountWriteModel User DbSet

Czemu CQRS to krok wstecz i dwa do przodu Moja pierwsza myśl:

Czemu CQRS to krok wstecz i dwa do przodu To krok wstecz bo: Upychamy kod w jedno miejsce. Ryzykujemy, że w złych rękach powstanie spaghetti code. Powielanie kodu pomiędzy metodami. Brak ścisłego podziału odpowiedzialności.

Czemu CQRS to krok wstecz i dwa do przodu To dwa kroki do przodu bo: Kod odpowiedzialny za jedną operację biznesową jest w jednym miejscu. Zmuszamy do myślenia przy programowaniu i zrozumienia logiki biznesowej. Zmniejszamy ryzyko kopiuj wklej. Jest ścisły podział odpowiedzialności. Skupiamy się na jednej rzeczy na raz: - Oprogramowując zapis nie skupiamy się na tym jak my potem to odczytamy - Analogicznie odczyt oprogramowujemy na podstawie dostępnego modelu zapisu

Czemu CQRS to krok wstecz i dwa do przodu PRZYKŁAD

Domain Driven Development na ratunek.

Domain Driven Development na ratunek. Ubiquitous Language Źródło: http://www.userdrivendev.com/p/user-language-inside-source-code.html

Domain Driven Development na ratunek. Bounded Contexts Źródło: https://www.infoq.com/articles/ddd-contextmapping

Domain Driven Development na ratunek. Aggregates Entities Value Objects

Domain Driven Development na ratunek. User Interface Application Layer Domain Infrastructure

Domain Driven Development na ratunek. Application layer Domain User Interface Infrastructure User Table UserController AddUserCommandHandler Account Table Controller Command handler UserWriteModel DB DB AccountWriteModel AddUserCommand ORM User DbSet

Magia Event sourcingu Źródło: https://gist.github.com/OlegIlyenko/a5a9ab1b000ba0b5b1ad

Magia Event sourcingu Źródło: https://msdn.microsoft.com/en-us/library/jj591559.aspx

Magia Event sourcingu Źródło: http://mikhail.io/2016/11/event-sourcing-and-io-complexity/

Magia Event sourcingu Zalety event sourcingu: Kod pokrywa się z faktyczną logiką biznesową Elastyczność Skalowalność Pełna historia zmian Integracja z innymi systemami Łatwość w modyfikacji oraz poprawie błędów Ułatwia procesowanie danych w systemach big data, mikroserwisach itd.

Magia Event sourcingu Wady event sourcingu: Eventual consistency Performance Trudniejsze generowanie widoków do odczytu

dotNet Core nie taki straszny

dotNet Core nie taki straszny

Marten + MediatR = Teoria w praktyce. PRZYKŁAD

Podsumowanie

https://github.com/oskardudycz/GoldenEye Dziękuję za uwagę  Więcej przykładów na: https://github.com/oskardudycz/EventSourcing.NetCore Chętnych do zabawy z Event Sourcing, .NET Core, DDD i innych zapraszam do kontrybucji we frameworku: https://github.com/oskardudycz/GoldenEye