Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Architektura, która pomaga!
Search
Matt Stasch
November 25, 2016
Programming
640
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
510
HATEOAS dla ludzi!
mat3u
0
560
Domain Events - czyli jak radzić sobie z rzeczywistością!
mat3u
1
960
Rx 101
mat3u
0
910
F# 101
mat3u
0
850
Prosta architektura dla nieprostego systemu
mat3u
1
870
Other Decks in Programming
See All in Programming
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
150
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
140
dotNET_vulnclicker_intro.pdf
deka_morita
0
130
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.6k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
340
速習iPhone Duo対応
yuukiw00w
2
970
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.8k
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5k
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.5k
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
310
すこし踏み込む CancellationToken
htkym
2
1.7k
Featured
See All Featured
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
780
Bash Introduction
62gerente
615
220k
A Tale of Four Properties
chriscoyier
163
24k
Google's AI Overviews - The New Search
badams
0
1.6k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
350
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
920
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Ethics towards AI in product and experience design
skipperchong
2
420
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
YesSQL, Process and Tooling at Scale
rocio
174
15k
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