Architektura,która pomaga!
Mateusz Stasch
Mateusz Stasch
@mattstasch
http://mattstasch.net
SPABackend DB
Mobile
BackendEF
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
WSP DB
Command
Events
Queries
A
P
I
CQS
T
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
DB
Zmiana
WSP Skutki
Odczyt
A
P
I
SPA
Mobile
MobileAgreementResource
AgreementResource
Mobile
Diff
Skutki
Mobile Create Approve
DomenaCommand
Event
Event
DomenaCommand
Event
Event
API
T
Event
C : ApproveAgreement E : AgreementApproved
EH : AgreementNotificationHandler
EH : SupersedeAgreementHandler
EH : AgreementMailHandler
class AgreementAuditLog: IHandle<AgreementPublished>
{// ...
public void Handle(AgreementPublished @event){
// ...}
}
class AgreementAuditLog: IHandle<AgreementPublished>
{// ...
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
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
WSPSPA DB
Command
Events
Queries
A
P
I
CQS
T
Resource
W
S
P
ResourceAllowed
Operations
Resource Resource
W
S
PAllowed
Operations
"AllowedOperations":{
"CanEdit": false,"CanApprove": true,"CanReject": true,"CanUploadContract": false,...
WSPSPA DB
Command
Events
Queries
A
P
I
T
S
Nie myśleć…… o tym co nie jest esencjonalną wartością biznesową
To jest UX dla programistów
Żółw
„ ”
Dzięki!Mateusz Stasch