Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Architektura, która pomaga!
Search
Matt Stasch
November 25, 2016
Programming
610
0
Share
Architektura, która pomaga!
My presentation from FutureDevDay 2016
Matt Stasch
November 25, 2016
More Decks by Matt Stasch
See All by Matt Stasch
Monads in .NET
mat3u
0
460
HATEOAS dla ludzi!
mat3u
0
520
Domain Events - czyli jak radzić sobie z rzeczywistością!
mat3u
1
920
Rx 101
mat3u
0
860
F# 101
mat3u
0
810
Prosta architektura dla nieprostego systemu
mat3u
1
830
Other Decks in Programming
See All in Programming
実践CRDT
tamadeveloper
0
370
Migration to Signals, Signal Forms, Resource API, and NgRx Signal Store @Angular Days 03/2026 Munich
manfredsteyer
PRO
0
240
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
440
Laravel Nightwatchの裏側 - Laravel公式Observabilityツールを支える設計と実装
avosalmon
1
320
10年分の技術的負債、完済へ ― Claude Code主導のAI駆動開発でスポーツブルを丸ごとリプレイスした話
takuya_houshima
0
1.8k
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
220
へんな働き方
yusukebe
6
2.9k
Coding at the Speed of Thought: The New Era of Symfony Docker
dunglas
0
4.7k
Feature Toggle は捨てやすく使おう
gennei
0
440
ふりがな Deep Dive try! Swift Tokyo 2026
watura
0
130
Running Swift without an OS
kishikawakatsumi
0
380
iOS機能開発のAI環境と起きた変化
ryunakayama
0
170
Featured
See All Featured
A Soul's Torment
seathinner
6
2.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
720
Accessibility Awareness
sabderemane
0
94
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Side Projects
sachag
455
43k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Transcript
Architektura, która pomaga! Mateusz Stasch
Mateusz Stasch @mattstasch http://mattstasch.net
PROJEKT IT
None
Źródło: CNN
UI Backend DB
SPA Backend DB Mobile
Backend SPA Mobile
Backend EF SPA Mobile
Backend DB SPA Mobile
DB A P I RESTish SPA Mobile
DB Command A P I SPA Mobile
DB Command Events A P I SPA Mobile
DB Command Events Queries A P I CQS SPA Mobile
CQRS
DB Zmiana WSP Skutki Odczyt A P I SPA Mobile
DB Zmiana WSP Skutki Odczyt A P I SPA Mobile
DB Zmiana WSP Skutki Odczyt A P I SPA Mobile
DB Zmiana WSP Skutki Odczyt A P I SPA Mobile
Zmiana
Mobile
Mobile Agreement Resource Agreement Resource
Mobile Diff Skutki
Mobile Create Approve
Zmiana
Domena
Domena
Domena Command
Domena Command Event Event
Domena Command Event Event API T Event
C : ApproveAgreement E : AgreementApproved EH : AgreementNotificationHandler EH
: SupersedeAgreementHandler EH : AgreementMailHandler
Skutki
class AgreementAuditLog : IHandle<AgreementApproved> { // ... public void Handle(AgreementPublished
@event) { // ... } }
class AgreementAuditLog : IHandle<AgreementApproved> { // ... public void Handle(AgreementPublished
@event) { // ... } }
class AgreementMailHandler : IHandle<AgreementApproved> { // ... public void Handle(AgreementApproved
@event) { MailService.Send(); } }
Manager Facade DB API Service
AgreementApproved
AgreementCreated AgreementConditionsChanged AgreementApproved AgreementSuperseded AgreementArchived
AgreementCreated AgreementConditionsChanged AgreementApproved AgreementSuperseded AgreementArchived mstasch jkowalski jkowalski system mstasch
2016/01/05 12:34:34 2016/01/05 14:35:28 2016/01/07 10:04:10 2016/06/01 14:12:34 2017/01/01 00:00:50
Manager Facade DB API Service
Odczyt
Mobile
Mobile
Mobile Cache
Mobile Cache
Architektura daje klocki na właściwym poziomie abstrakcji
Źródło: Widmann SRL
Źródło: Wikimedia
Źródło: Wikimedia
SPA DB Command WSP Events Queries A P I CQS
if (user.Roles.Any(RolesHelper.IsAdministrator) && agreement.status == AgrementStatus.Active) { // ... }
if (user.roles.some(roleHelper.isAdministrator) && agreement.status === "Active") { // ... } ... .Where(agr => agr.Owner == user.Id && agr.Editors.Contains(user.Id)) ...
SPA DB Command Events Queries A P I S S
S S
WSP SPA DB Command Events Queries A P I CQS
T
Resource W S P
Resource W S P Resource Allowed Operations
Resource Resource W S P Allowed Operations "AllowedOperations": { "CanEdit":
false, "CanApprove": true, "CanReject": true, "CanUploadContract": false, ...
WSP SPA DB Command Events Queries A P I T
S
Security
Hypermedia
Po co to komu?
Nie myśleć…
None
Nie myśleć… … o tym co nie jest esencjonalną wartością
biznesową
To jest UX dla programistów Żółw „ ”
Pytania?
Dzięki! Mateusz Stasch