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
0
470
Architektura, która pomaga!
My presentation from FutureDevDay 2016
Matt Stasch
November 25, 2016
Tweet
Share
More Decks by Matt Stasch
See All by Matt Stasch
Monads in .NET
mat3u
0
330
HATEOAS dla ludzi!
mat3u
0
390
Domain Events - czyli jak radzić sobie z rzeczywistością!
mat3u
1
780
Rx 101
mat3u
0
710
F# 101
mat3u
0
660
Prosta architektura dla nieprostego systemu
mat3u
1
700
Other Decks in Programming
See All in Programming
pixivアプリでマルチモジュールを実現するまで
gatosyocora
1
130
GitHub Actionsで泣かないためにやっておきたい設定 / Recommended GHA settings to avoid crying
pinkumohikan
3
490
Tailwind CSSを本気でカスタマイズする方法
fsubal
2
230
ログラスを支える設計標準について / loglass-design-standards
urmot
10
2.1k
Doctrine ORMでValue Objectを扱う方法4選 #phpstudy / 4 ways to handle Value Objects with Doctrine ORM
77web
4
110
1BRC--Nerd Sniping the Java Community
gunnarmorling
0
300
Rubyでたのしむクリエイティブコーディング/Enjoy Creative coding with Ruby
chobishiba
1
160
プールにゆこう
irof
2
120
Blue/Greenデプロイの導入による 運用フローの改善
kudoas
1
350
Ruby GitHub Packages
bkuhlmann
0
620
PostmanでAPIの動作確認が楽になった話
h455h1
0
120
Git Rebase
bkuhlmann
11
1.6k
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
123
8.5k
No one is an island. Learnings from fostering a developers community.
thoeni
14
2.1k
For a Future-Friendly Web
brad_frost
171
8.9k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
356
22k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
76
41k
Fashionably flexible responsive web design (full day workshop)
malarkey
397
65k
Navigating Team Friction
lara
177
13k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
13
1.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
16k
Stop Working from a Prison Cell
hatefulcrawdad
266
19k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
115
18k
What the flash - Photography Introduction
edds
64
11k
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