Upload
milan-skoric
View
235
Download
2
Embed Size (px)
Citation preview
#tarabica16
#tarabica16
#tarabica16
Arhitektura i implementacija CQRS
šablona sa Microsoft.NET-om
Skorić Milan<[email protected]>
#tarabica16
Cilj prezentacije
• CQRS - “Command Query
Responsibility Segregation”
nije samo za velika i kompleksna
„enterprise“ rešenja već je
upotrebljiv i prikladan u svakom
rešenju, pogotovo za „cloud“.
#tarabica16
O meni
• Prvi profesionalni kod
napisan uz pomoć „beta“
verzije .Net Framework-a
početkom 2001. godine
• Pionir mobilnih i
elektronskih servisa za
bankarstvo u regionu
• Jedan od osnivača
#tarabica16
Agenda
• O tehnologijama
• Moderna arhitektura poslovnih aplikacija
• Šta je to CQRS šablon?
• Primer implementacije CQRS-a u Microsoft .Net
• Slobodno pitajte
#tarabica16
Agenda
• Molim vas da popunite anketu pre izlaska.
• Red drugi, zaokružite broj sale (005) i ocenu, hvala!
#tarabica16
Digitalizacija
#tarabica16
Metapodaci
#tarabica16
#tarabica16
Ciljevi za Smartwave
• Dostupan
• Brz odziv
• Laka integracija
• Agilnost
• Jedostavno za postavljanje
• Telemetrija
• Ako je moguće i jeftino
#tarabica16
Fokus
ASP.NET MVC XAMARIN
SignalR, EF Code Frist
ASP.NET Web API
Visual Studio & .NET
#tarabica16
U oblacima sa BizSpark-om
• Jednostavno se postavlja uz Visual Studio
• Nema „gvožđa“ za održavanje
• Skalabilnost dostupna na klik
• Multi-tenant
https://azure.microsoft.com/en-
us/documentation/articles/sql-database-elastic-
tools-multi-tenant-row-level-security/
#tarabica16
A arhitektura
Kreirana za laku zamenu umesto česte ponovne
upotrebe
#tarabica16
Tradicija
PREDNOSTI
• Jednostavno se pravi
• Puna podrška
menadžmenta
• Već utabane staze
MANE
• Limitirana skalabilnost
• Teško se održava a često i
sporo
• Prekomerna konverzija
poruka koji se šetaju među
slojevima
#tarabica16
#Onokad baza nije centarCore
Domain
API
Infrastructure
#tarabica16
Domenski model - DDD
Segments
Party Process
Roles
#tarabica16
DDD iz prakse sa EF
#tarabica16
Izbegavajte javne konstruktore bez
parametara
#tarabica16
Koristite privatne članove a
ponašanje držite uz objekte
http://thedatafarm.com/data-access/entity-framework-private-constructors-and-private-setters/
#tarabica16
Microservice
UI HTML, WPF …
APIJSON, XML …
SVC
ModelAggregates,
Entities, Value Objects, Events
• Svaki „mikro“ deo
sadrži sve što je
neophodno da bude
potpuno samostalan
#tarabica16
CQ(R)S iz perspektive koda
• CQRS ( najprostiji)• CQS
#tarabica16
Tipovi implementacija
• Regularna implementacija – vraća novac
– Transakcija po akciji
– Upiti vraćaju DTO
• Standardna implementacija
– Domenski model je fokusiran na ponašanje
koje menja stanje
– Tabela po upitu
• “Event Sourcing”
– Čuvaju se samo događaji na osnovi kojih se
gradi stanje domena
– Automatski rešen istorijat i audit podataka
CQ
ES
SqLDocument
Graph
#tarabica16
Standardna implementacija
ApplicationLayer
State DB
Event store
Read stack
Domain Layer
In MemoryHandlers
Command Event Data
Handlers
Model Services
BUS
#tarabica16
Azure implementacija
SPA
Web API
Query Command
Repository
Read Model
Azure – BUS sub-system
Queue
Blob Storage
Azure Table Storage as
Event Store
Command handler
Domain Events
EventHandler
Query Handler
HTTPReq./Res.
HTTPReq.
Worker RoleWeb Role
Unit ofWork
#tarabica16
Demo
#tarabica16
WebAPI
#tarabica16
Komanda
#tarabica16
Obrada komande
#tarabica16
Provera ispravnosti
#tarabica16
Command Bus
#tarabica16
Upit
#tarabica16
Read-Only EF Context
#tarabica16
Domenski događaji
#tarabica16
Događaji iz domenskih objekata
#tarabica16
Obrada događaja
#tarabica16
Demo
#tarabica16
Kružna arhitektura
Task based UI
Read ModelDomain Model
Commands: Create Comment
Queries: Find all comments
Event: Comment Created
#tarabica16
Prednosti i mane
PREDNOSTI
• Komande su glagoli i
podržavaju uvek samo
jedan scenario
• Query Store – može da
bude NoSQL
• Proširivost
• Performantnost
• Lako se testira
• Lako se integriše
MANE
• Teško je održavati
sinhronizaciju između više
skladišta podataka
• Puno novih koncepata
• Puno novih odluka koje
treba doneti
• Limitirana praksa
#tarabica16
Resursi
• https://msdn.microsoft.com/en-us/library/jj554200.aspxBy Patterns & Practices
• http://www.codemag.com/article/1411071By Leonardo Esposito
• http://martinfowler.com/bliki/CQRS.htmlBy Martin Fowler
• http://codebetter.com/gregyoung/2012/09/09/cqrs-is-not-an-architecture-2/By Greg Young
– http://www.udidahan.comBy Udi Dahan
#tarabica16
Pitanja i odgovori
• Slobodno se prijavite, Smartwave trenutno nudi
besplatno „beta“ verziju za testiranje i evaluaciju
http://smartwavebeta.cloudapp.net/
• Kod sa predavanja biće dostupan na:
https://github.com/milanskoric
#tarabica16
#tarabica16