
benvenuto alla sessione su dominio
design e riposo
il mio nome è oliver geeky lavoro per a
la società ha chiamato chiave ha qualcuno mai
sentito parlare di chiave Oh chiunque abbia mai sentito parlare di
Spring Framework va bene, questo è un po ‘
meglio sì che siamo la società dietro il
Spring Framework Faccio parte della primavera
team di progettazione che si occupa di
progetti di dati primaverili nella loro interezza
in pratica sono e sono il capo del progetto
di quello e potresti chiedertelo perché da ragazzo
chi è come lavorare solo con i dati
fondamentalmente parlando di DDD e resto e
il motivo è che sono coinvolto
in come due aspetti principali della
spazio dati primaverili che è il
spring data store implementations that
sul loro strato superiore esposto a
modello di programmazione di repository che
ci ottiene la connessione a due domini
design guidato e d’altra parte che ho
coniato una piccola biblioteca chiamata primavera
orribile che fondamentalmente porta sostegno
per creare ipertestuali basati
rappresentazioni alla molla MVC
quadro e sulla combinazione di questi due
mondi
Ho anche l’arresto al piombo primaverile
modulo che fondamentalmente sta prendendo il tuo
Spring data repository e li trasforma
in una fondazione per quello che potrebbe essere un
API REST e se la guardi
che non è qui potresti fondamentalmente
penso che stiamo prendendo come i dati da un
database e quindi capovolgere le tabelle
90 gradi e poi gira la svolta
in JSON e chiamarlo in una API così
non è quello che vogliamo fare e
in realtà lo sviluppo di dati di primavera ha resto
mi ha insegnato alcune lezioni sul perché
è una cattiva idea e come potremmo
effettivamente fare meglio e venire dal
dal fatto che il riposo non è ritagliato
usando JSON e HTTP mi sono chiesto ok
qual è ciò che è effettivamente necessario prendere
il tuo modello di dominio o il tuo DDD
modello di dominio
trasformalo in un web di riposo
servizio o per esprimerlo nell’altro modo
in giro se tu se non ne fai nessuno a
particolare o se si, se si evita
pensando a certe cose nel
area ddd quali problemi otterrai quando
costruisci il resto del servizio web proprio così
probabilmente tutti conoscono questo diagramma
eccolo dal libro di Eric Evans
progettazione guidata dal dominio cosa mi piace fare
è concentrarsi su questi aspetti nel
in alto a destra qui come discutere brevemente di me
non voglio fare un’introduzione a
questi concetti perché sto assumendo
sei qui perché già lo sai
loro e basta dare un’occhiata a quelli
concetti dalle conseguenze che loro
di solito hanno come usare questi
concetti e le conseguenze che ha
in quando si costruisce il resto Servizi Web e
rappresentazioni in particolare perché
questo è che sta per essere come il principale
argomento qui come hai visto come se
Sto lavorando a un quadro di primavera che
di solito significa o per lo più significa codifica in
Java quindi alcune delle sfide e cose del genere
potrebbe essere correlato a D al al
la lingua in realtà e altri potrebbero essere a
un po ‘più fortunato qui e il primo
cosa e questo è il motivo per cui l’ho menzionato qui
è valore oggetti oggetti valore sono molto
cosa potente ma sono davvero a
dolore nel culo per costruire a destra Java
quindi se si desidera solo per costruire una e-mail
indirizzo classe come hai costruttori
e poi equivale a codice hash
implementare e tutto questo tipo di cose così
questo è in realtà un motivo per cui le persone
evitare di costruire questi o usare valori
oggetti la cosa più divertente di solito
vedere quando è quando si tratta di come DJ
sono tramite la tua API di validazione gratuita
quando hai una classe che ha una stringa
proprietà che dice indirizzo e-mail e
ha un’annotazione che dice l’ indirizzo email
e poi mi chiedo sempre bene, perché no
lo fai diventare un tipo in primo luogo
ma le persone sono pigre ed è per questo che loro
evitano di usare oggetti di valore a volte
ma la anche se si dispone di chiamarli
manualmente penso che ripaga ancora se
tu fai
credimi, in questo caso c’è questo
come questo discorso su oggetti di valore
ma ho fatto è qualcosa come il
Riferimento della legge di Conway sai parlare di ddd
senza collegarsi a quel discorso eccolo
come tutto su oggetti di valore e come
in pratica ti permettono di controllare
la complessità nel vostro nel codice e fare
codice più facile da capire, quindi questo è
che ha detto che ne valeva ancora la pena
anche se è necessario come codice di loro
manualmente però c’è Lombok che hai
sentito parlare di Lombok prima, quindi se ti piace
non l’ho visto prima di dare un’occhiata
quella
è fondamentalmente un’annotazione del valore aggiunto
sulla classe che in questo caso e che
lo rende abbastanza utilizzabile e facile
per creare quei tipi ancora se tu se
sei se devi prendere un ostacolo netto
ottieni altri avversari ora che tu
avere la lingua fuori del modo in cui si
faccia in letargo iniezione e soprattutto
sono lì il problema è che c’è
ti richiedono di fare cose o è
è difficile scrivere davvero immutabile
tipi o classi con questi framework
in mente giusto quindi devi insegnare loro
come mappare determinate stringhe come una email
indirizzo stringa dal tuo dal tuo JSON
rappresentazione in quella classe e ritorno
e non è davvero difficile non sto dicendo
ma è ingombrante e e
fare qualche sforzo che ancora apprezzi
avere oggetti importanti aspetto importante
qui così entità e repository D
questo è quello con cui la maggior parte della gente si occupa
su base giornaliera anche se hanno
come i campi stringa per gli indirizzi email
nelle loro classi ma il problema
specialmente nello spazio Java è con
c’è JPA, nel caso lo conosci
con quello siamo una specie di tutto
è un’entità giusta, quindi non lo è
il concetto di entità nell’APP no
necessariamente corrisponde a quello in
design basato sul dominio e che lo rende
a volte un po ‘difficile da differenziare
uno da un altro permettimi di darti un
esempio qui diciamo di avere un
cliente che ha un indirizzo e alcuni
informazioni di pagamento qui e in
email corretta e c’è una fattura
indicando il cliente c’è un
ordine che consiste di elementi pubblicitari e
gli elementi pubblicitari indicano il diritto di un prodotto
questa roba si è tradotta in JPA
significherebbe fondamentalmente quell’indirizzo potrebbe
probabilmente essere un’entità l’email come io
detto piuttosto un cliente oggetto valore è
probabilmente un’entità ordina una linea di entità
l’oggetto è un’entità yada yada yada quindi il
è come se avessi provato
per esprimere qui in quel modello ci sono
alcuni gruppi di funzionalità sì
fondamentalmente così tutto ciò che riguarda il
i clienti possono essere leggermente raggruppati qui
e la relazione tra un ordine
e il cliente e un ordine e il
l’elemento pubblicitario è completamente diverso
destra
Credo che si sta cercando quello che sto cercando di
arrivare a che è fondamentalmente che alcuni di
queste entità formano percorsi aggregati e
da quello aggregati intorno a loro e
altri no e questo è qualcosa se tu
guarda le entità nel tuo
applicazione non si mangia veramente il
modello o D il codice non è davvero
svela che è giusto questo concetto
non rivela cosa sia una radice aggregata
dentro nel tuo codice per fortuna a
il repository è definito per essere fondamentalmente I
significa che non è definito in questo modo
ma essenzialmente un’entità più il
repository forma un aggregato perché è
che un aggregato o sì un aggregato
è definito o la radice aggregata in dentro
in particolare è definito come l’unico
la cosa che si interagisce con quella
tiri fuori dal fuori
repository o che crei attraverso a
fabbrica e tutto il contenuto
le entità vengono indicate o utilizzate da
riferendosi a quell’aggregato nel
il primo posto che ha anche il
conseguenza di ciò come l’ aggregato
root o l’aggregato ha il
responsabilità di controllare gli invarianti su
quello su quell’intero aggregato giusto così
fa in modo che tu sia il
aggregato di per sé conforme a certo
vincoli e logica aziendale simile
destra
in modo che significa che se prendiamo il
repository con in considerazione noi
può fondamentalmente trovare tutte le entità che
abbiamo repository per e poi sapere
che i loro aggregati che sono in qualche modo
informazioni utili perché come ho detto
gli aggregati sono come belli o loro
creano una sorta di coerenza
confine e da questo fatto in realtà fanno
per i bei limiti di rappresentazione per
il tuo per la tua domanda per il tuo di
il tuo servizio web
un’altra cosa che gioca su questo è
che gli aggregati sono le cose che tu
di solito si riferiscono a così e alcune parte
di un aggregato come hai visto nel
esempio prima con l’ordine e il
ordina l’elemento pubblicitario in cui è presente la riga
l’articolo si riferisce al prodotto giusto così un a
l’entità nidificata in quell’aggregato è
riferendosi ad alcuni altri aggregati e
è permesso solo riferirsi ad altri
aggregati non alle entità all’interno di altri
aggregati e l’interessante o il
la cosa conveniente qui è quella
perché gli aggregati sono la cosa principale
a cui ti riferisci come puoi bene
traducilo nelle risorse te
esposti sono identificabili e solo
quelle cose che possono si essere identificati
può effettivamente fare riferimento al bene in modo che possiamo
solo creare collegamenti a questi altri
aggregati sono appena tornato come
viaggiando qui da un cliente
workshop con il loro laboratorio clienti
su come costruire un hanno questa eredità
database e vogliono come avvolgere quello
con una bella API e questi ragazzi hanno ottenuto
iniziato con prendiamo la primavera che arresta
e generiamo le nostre entità entità API
dal database perché gli strumenti
ti concede e poi noi per ogni entità
repository creativo e poi ci spostiamo
molla che arresta e poi tutto a
all’improvviso abbiamo un’API REST ed è come
okay, non è proprio quello che in realtà
dovrebbe fare perché come ho detto il
repository trasforma l’entità in uovo
una radice aggregata e se ne hai una molto
modello di tavolo a grana fine e non è così
in realtà non si ha realmente creare tutti
Eero n aggregato – destra
quindi è un punto chiave per sempre
torna a ciò che è il tuo attuale
concerto il tuo modello concettuale attuale e
è quello che ho passato negli ultimi due giorni
facendo effettivamente ricordare loro no , non lo faccio
voglio sapere sui tavoli cosa è cosa
cosa sembra il modello giusto e
è una cosa non facile da fare
ma è che è qualcosa che dovresti
ricordati di un’altra cosa
è venuto in realtà proprio in quello
l’officina è una relazione bidirezionale
sono abbastanza problematici perché
significano fondamentalmente entrambi i lati
devono essere governati tutto il tempo e
Non sono sicuro che questo è un è che è un Java
problema qui, ma soprattutto in in JP
un codice che ho visto molto rotto
rapporti bidirezionali che
è successo a lavorare per caso perché
erano solo molti manipolati dal
parte destra, ma era solo perché
nessuno lo ha manipolato dal torto
lato per caso fondamentalmente okay um oh
sì, c’era una cosa da dire qui
che diventa particolarmente importante se
tu se stai parlando di cosa
costituisce un contesto limitato a destra
relazioni bidirezionali tra
circa nel contesto sono come anche a
versione peggiore di quella cosa
dovresti provare a vincere in primo luogo
va bene così tanto per il molto
divertente le cose fondamentali che non voglio
allungarlo troppo a lungo perché il o
la cosa più interessante di cui parlare
in realtà qui sono eventi di dominio e allora
cosa significa eventi di dominio e
fondamentalmente c’è un in realtà è il
modo in cui esprimi eventi yeah al
dominio come non eventi tecnici ma
come gli eventi aziendali che accadono a questo
dominio e pensiero in questi termini e
la prima cosa che potresti fare è
in pratica non lo fanno affatto bene reti
quello spazio che di solito è il codice che tu
che vedi o se vedi un codice come
questo di solito sembra che tu abbia un
classe che ha getter e setter come
le classi di dominio e le persone chiamano
setter fino in fondo e
questi sono questo è lo stesso sulla stessa
pezzi di software che di solito
capire vestito come crudo su HTTP
giusto in modo da ottenere alcuni dati voi
manipola i dati e lo scrivi di nuovo
giusto è fondamentalmente una base di dati via
HTTP bene così il livello successivo che puoi
arrivare a fare è fondamentalmente rendere il
operazioni ai tipi di dominio espliciti
esponendo metodi su questi due principali
tipi giusto c’è questo è come se fosse
in fondo è quello che cerco di far bollire
giù a se stai chiamando più di uno
setter o se vedi un pezzo di codice
questo causa più di un setter di fila
in pratica ti manca un concetto qui
perché non stai cambiando sai
colpiscilo alla cosa ma tu stai facendo
qualcosa per la cosa e quello dovrebbe
piuttosto essere espresso come un metodo giusto um
l’esempio classico è sebbene non ci sia
potrebbe essere proprio come in realtà è solo
un singolo setter se cambi il
indirizzo su alcuni utenti non dovrebbe essere impostato
indirizzo perché non ne rivela nessuno
conflitto in qualsiasi contesto potrebbe essere come
spostare o qualcosa di giusto a seconda
il tuo dominio, ovviamente, ma sii espressivo
lì ogni volta che vedo codice client o codice
che chiama più di un set su alcuni
obiettare che preferisco presentare il
metodo o più metodo dedicato su
l’oggetto e quindi modificare lo stato
internamente in modo che ti dà abbastanza a
ti dà abbastanza un bel po ‘
già
la prossima cosa o il prossimo livello qui è
esponendo alcune di queste operazioni sul
modello di dominio come eventi ad altri
interessi interessati dei clienti proprio così
fondamentalmente consideri questi
transizioni di stato degli eventi di dominio che
ci porta già nel o
transizioni di stato come eventi principali e
allora questo ci dà davvero un
connessione con il resto del mondo qui
perché questo ci dà già un suggerimento
cosa potremmo fare con questi espliciti
transizioni di stato e come possiamo noi
potrebbe davvero modellarli dentro
nel resto del mondo giusto e un approccio
vedi che in realtà spesso lo è
esportare quegli eventi in via feed giusto
così come un atomo si nutre con il
con le cose rilevanti che altro
le parti potrebbero essere interessate qui e
come quello che si può consumare si potrebbe
usa anche la messaggistica o qualcosa del genere
a
informare le altre parti su quelle
eventi ma come stiamo parlando di riposo
qui ho scelto l’esempio di feed the
il motivo per cui penso al the
motivo particolare per cui penso sia – lo è
probabilmente un altro livello è che esso
non deve significare che stiamo parlando
sul sourcing di eventi a livello 2, a destra
il sourcing di eventi è fondamentalmente o CQRS o
la combinazione dei due è fondamentalmente
portandolo al livello di
trasformando tutto in eventi
giusto così ogni operazione è espressa come
un evento che non necessariamente ha
per essere il caso al livello on 2
perché in questo se sei se lo sei
operando a quel livello che ti piace
decidere bene quali degli eventi
sono davvero necessari per essere memorizzati e quindi
più tardi pubblichi su altri due
le altre parti stanno bene, siamo noi
tornerà al livello due in pochi
minuti quindi ho parlato di come sono stato
coprendo DDD ancora un po ‘e non l’ho fatto
come fatto troppe connessioni o troppo
molte connessioni per riposare ancora così tu
probabilmente tutti lo sanno molto
fondamentale quindi stiamo parlando
risorse che sono identificabili
riferibile e hanno sempre comunicato
con rappresentazioni attraverso e usiamo
un’uniforme di cosa si tratta
interfaccia uniforme ma la cosa principale in
termini di progettazione del api di solito è
progettando così le rappresentazioni
fondamentalmente trovando le risorse che noi
desidera esporre
esplicitamente dicendo che non ti alzi la modellazione
trovare le risorse che vogliamo
esporre e poi decidere cosa va a finire
queste risorse e cosa possiamo fare con
loro da quello che possiamo fare con loro ho di
Certo non intendo come l’individuo
metodi da attivare perché è quello che
che il resto definisce già ma da cui
indicare in quale altro stato questi
le risorse possono essere possono essere trasformate
e come esprimere ciò giusto così io
già fatto il punto che aggrega
sono come una sorta di cosa carina da guardare
in primo luogo, quindi assumendoti
avere il tuo modello di dominio con diciamo
come cinque aggregati o qualcosa del genere
perché in realtà ne rivelano certo
caratteristiche dei caratteri come
l’identificazione si riferisce alla capacità e anche
abbastanza importante la portata della coerenza
perché come le modifiche a un aggregato
dovrebbe essere coerente all’interno del
aggregano ne fanno una bella una bella
fondamento per una risorsa perché mi piace
se tu se metti messo un problema
richiesta al alla risorsa e quello
mappe di confini di consistenza per il tuo dominio
bene, allora non c’è bisogno di pensare
su come transazioni commerciali esplicite
o risorse di transazione transazionale
o elaborare le risorse in primo luogo
Non sto dicendo che è come è
sempre fattibile basta prendere il
aggregare trasformarlo in una risorsa e
la tua offerta sarà terminata
ma è almeno un buon inizio
punto perché le risorse effettivamente condividono
le stesse caratteristiche qui come il
risorse da esporre in um api
giusto, così abbiamo il prossimo
cosa interessante qui in realtà è il
il tema dell’ipermedia
quindi gli ordini ipermediali significano che non vengo
con la sigla impronunciabile
qui, ma fondamentalmente serve come
dati che il cliente è interessato a
con le informazioni di navigazione proprio così
non stiamo tornando solo arbitrariamente
blob blob di JSON ma ne includiamo alcuni
mezzi di comunicazione di link come Let’s
Diciamo che usiamo l’inferno o la raccolta JSON o
sirena o qualsiasi altro formato ipermediale
voglio usare qui HTML e il client
utilizza effettivamente tali informazioni per trovare
fuori cosa può fare con il con
la rappresentazione quindi cosa questo cosa
questo significa in realtà quel cambiamento nel
il client è che diciamo che scrivi e basta
un’app per iPhone e io ne ho uno
esempio di un po ‘di un progetto di esempio
più tardi si stanno facendo ordini di caffè
diciamo che hai un client iPhone con
quello realmente parla con quello con quello
servizio web e inserisco alcuni ordini
il mio nel mio carrello e ora deve piacere
scoprire ok sono autorizzato o voglio
per andare alla cassa destra e il
domanda interessante è come fa il
il cliente in realtà determina se può
effettivamente farlo o dovrebbe presentare il
pulsante per l’ utente e il non
ipermedia
approccio è fondamentalmente sapendo di cosa
il servizio quando il server ci permetterà
alla cassa e il codice che la conoscenza in
il cliente ha ragione, quindi in realtà chiamiamo
Conoscenza del dominio nel client con
ipermedia fondamentalmente scambiamo il
conoscenza della complessità del dominio o
il non scambiamo la conoscenza del dominio
con un po ‘più di complessità nel
protocollo che nel mio precedente
esempio in pratica significa che non siamo realmente
legandoci a qualche conoscenza
questo è documentato da qualche parte ma noi
in realtà basta controllare se un certo
il collegamento è presente nel
rappresentazione e agire sulla presenza
o non presenza di collegamenti proprio così
cliente come tutti noi siamo stati al
discorso precedente qui
santo naturalmente c’era il
la domanda è venuta fuori come fai tu
in realtà consigliamo hypermedia e il
rispondi pure sì gente
Piuttosto mi piace solo prendere il Jason
e Paul
rimandalo indietro e colpiscilo e roba
va bene, ma se ti va
impedire che la conoscenza del dominio venga a mancare
nel client, quindi hypermedia è il tuo
l’unica opzione ed è in realtà lo è
molto allineato alla nozione di
design guidato dal dominio che cerca di mantenere
la complessità di un sistema software
nel suo nucleo e in quel caso in
caso di api di riposo che di solito significa
il server giusto
quindi scambiamo questo il protocollo
complessità a cui è ovviamente esposto
il cliente così perché tutto ad un tratto
deve conoscere collegamenti e ipermedia
formati e yada yada yada
con il con lo scambiamo
complessità con la preferenza
o il vantaggio di non perdere il dominio
conoscenza al cliente o meno dominio
conoscenza nel client perché è
appena collegato presente o no sì così
un’altra cosa che gioca su questo è
che è un solo generale
raccomandazione Sto ancora provenienti da
quella discussione che va bene lo facciamo
come la nostra risorsa e poi la patch
come un matto e sappiamo solo quali campi
dobbiamo aggiornare quando bla bla bla così
se vuoi impedire questa conoscenza
da perdite nel cliente non mi piace
se alcuni client usano un metodo patch
è molto spesso qualcosa che guardo
e vedi okay è davvero la cosa
che dovrebbe fare o dovrebbe piuttosto
come cercare un link e poi seguire
quel collegamento e descriviamo formalmente come
come server descriviamo cosa
link effettivamente fa e in quale circuito
circostanze in realtà sembra giusto
Tutto ok
l’ultima cosa su quel fronte è quella
se stai implementando un modello di dominio
tu codi sul server allora tu
di solito sono esposti a parecchi
aspetti tecnici a cui piace giocare
l’implementazione ed è qualcosa
è una è una buona idea per fare in realtà
sicuro che questi tecnici o lato server
aspetti non perdono nel cliente che
in realtà significa che devi prendere
cura di trasformarli in web
adeguata
perché molto spesso le volte l’HTTP o
come il riposo in generale ha determinati mezzi
per ottenere certe cose che potresti
basta mappare questi lato server
implementazione di cose specifiche a cosa
Sto parlando della prima cosa è
questa è fondamentalmente la regola che volevo
in primo luogo o inventato
le sue radici aggregate diventano risorse in
il primo posto e un modello comune voi
vedere e questo è probabilmente un po ‘di
my my my flavour of the worldview here
perché abbiamo a che fare con i repository
per tutto il tempo mappano molto molto bene
sulla raccolta e sulle risorse dell’articolo a
dire tagliare i clienti e tagliare i clienti
ID slash molto simile al
lato server e il client non dovrebbe
cura dei tuoi occhi come ho detto ma da
il punto di vista del design lato server
che è questa è una bella partita il
relazioni tra o verso altri aggregati
diventare collegamenti nella rappresentazione
questo è in realtà ciò che non voglio essere
troppo specifico per l’implementazione qui ma
questo è ciò che fa sorgere il resto
fondamentalmente fa bene analizza il tuo
il tuo scopre sulle entità
che sono gestiti da repository e
ogni volta che un oggetto dominio fa riferimento a
un’altra entità gestita dal repository
diventa un collegamento invece di essere
incorporato e che naturalmente forma quelli
come le rappresentazioni aggregate e e
l’utilizzo utilizzando aspetti ipermediali i
mostraci un esempio in un po ‘molto
cosa importante i tuoi occhi sono i tuoi occhi
sono i tuoi occhi o ID i nostri ID sono ID
c’è un sacco di biglietti in corso o
essendo stato aperto in primavera, aveva avuto un arresto
chiesto perché è l’ identificatore del database
non contenuta nella rappresentazione
perché la risorsa è identificata tramite
il suo uri come suggerisce il nome grazioso
semplice ma il più meta storia qui
è che ci sono alcune proprietà
nel tuo codice o alcuni alcuni artefatti
nel tuo codice in realtà appartengono a un
molto simile
porta specifica come implementazione o
e non dovrebbero apparire davvero
nella nella nella rappresentazione
giusto perché in realtà sarebbero perdite
le informazioni qui lo stesso vale per il
proprietà della versione dell’annuncio nel per quelle
di te non dallo spazio Java JP a o
l’API di persistenza Java ha un a
meccanismo di fare blocco ottimistico
a destra il the il server conta fino a
versione per ogni operazione sicura in modo che
quando tu leggi un’entità, facciamolo
dire che ottengo clienti con la versione uno allora
qualcuno alle mie spalle aggiorna il
cliente che rende la versione due sul
server e invio che voglio aggiornare il
cliente poi di nuovo con me l’invio
versione uno che verrà respinta
perché sì, in pratica mando un
versione obsoleta la cosa è quella roba
che non dovrebbe necessariamente farlo o
non dovrebbe davvero farcela nel
rappresentazione perché c’è un HTTP
HTTP significa per quello o in qualche modo per
in realtà rappresentano ciò che è
fondamentalmente e-tax
in modo da poter usare get condizionale
richieste o come ho appena delineato il
aggiornare condizionale condizionale dello scenario
metti le richieste giuste, quindi sostanzialmente ci muoviamo
roba dall’oggetto dominio nel
appropriato in questo caso intestazioni HTTP
lo stesso vale per lo stesso vale per te
con un’ultima proprietà modificata, quindi non c’è
significa in entrata in dati di primavera in questo caso
per ottenere automaticamente l’ultima modifica
set di proprietà e trasformiamo quella proprietà
nell’intestazione dell’ultima modifica
questo è fondamentalmente il tipo di D che è
la stessa cosa va bene così è 30
minuti per darti un esempio di cosa
questo potrebbe sembrare come messo dentro
codice che ho creato
o in realtà molto tempo fa ho creato
questa cosa c’è questo libro di Ian
Robinson Jim Weber e quel ragazzo che vorrei
sempre non è riuscito a pronunciare correttamente
siwash ha passato adidas o qualcosa del genere
O’Reilly Restful Web Services è quello
quello che ho sempre mescolato li ha arrestati
pratica grazie per questo l’altro
anche uno va bene, quindi non voglio offenderti
chiunque qui è il nucleo di quello di
il libro è come ho detto questo lo Starbucks
tipo di esperienza di acquisto e modellazione
il flusso di ordinamento di quello di un di a
negozio come quello in un’API e ha un
divertente o abbastanza interessante è un
esempio interessante perché è molto
minuscolo è molto facile da guardare perché
ogni volta intendo che tutti possono identificarsi
bere caffè o tè o cosa hai
ed è davvero che non è niente di speciale
ma contiene un bel po ‘di
aspetti interessanti di un più complesso
API non è solo come non è solo
crude su HTTP giusto così che qui
il o che è il tipo di diagramma di stato
è fondamentalmente il flusso degli ordini proprio noi
metti un ordine che lo stato di transizione uno
mentre l’ordine è nello stato
di pagamento previsto posso aggiornarlo
che è che è quello effettivamente che
parte dove una sorta di operazioni grossolane
stanno bene proprio perché è così
in pratica è esattamente quello
molto tornando allo stesso stato qui
e stiamo solo aggiornando un aggiornamento potrebbe
a nuovo a nuove bevande per l’ordine
cosa hai
potresti modellarlo attraverso un esplicito
transizione di stato pure, ma nel
l’implementazione vado solo con a
post o patch richiesta di patch in questo caso
ma poi ci sono due interessanti
le transizioni di stato sono simili a quelle
annullando l’ordine e uno è il
pagando in questo caso che pone l’ordine
in una specie di stato di preparazione, allora è così
è elaborato in background
praticamente fino a quando non è pronto
stato e quindi devo farlo esplicitamente
Riconoscere che ho ricevuto l’ordine di
portarlo in uno stato completato, quindi se
vai avanti e ingenuamente modellalo
con o diciamo che anche tu potresti modellare
in questo modo giusto
o anche come documentarlo in questo modo
probabilmente non vuoi farlo perché
esponi qui i tuoi schemi oculari quali
qualcosa che probabilmente non vuoi
da fare e ancora più interessante
aspetto per questo scenario è qui
che ci sono alcuni vincoli
a quando puoi interagire con quale
risorsa in che modo giusto per te
puoi solo te lo puoi permettere
attivare il pagamento se l’ordine è
in quel particolare stato giusto e se io
prendere quel tipo di ordine o quello
descrizione dell’API come sviluppatore client
Fondamentalmente dovevo ora andare avanti e
dire e vedere scoprire cosa fa il pagamento
atteso in realtà significa e poi ho
probabilmente ispezionare la rappresentazione
per determinati campi di determinati valori e
cosa-hai-tu e tutta la roba che
Ho bisogno di infornare i miei clienti per sapere
quando posso effettivamente presentare il pulsante
alla fine rilasciare quella chiamata di riposo
ecco quindi se lo prendi leggermente
in modo diverso e dichiara semplicemente la risorsa
tipi e dire ok ogni volta che trovi un
link di pagamento o tipi di relazione in questo
caso perché sì ogni volta che trovi un
collegamento di pagamento si può solo questione di
corso una richiesta e poi lo hai
per definire il pagamento che è necessario
andare con esso e quindi si invia l’ordine
e questo in realtà ti porta molto
più vicino a D al dominio attuale
qui e l’ implementazione del
del dominio incontra porta la scatola di riposo
è proprio come c’è un
implementazione basata su jax-rs in questo
nel libro stesso ne ho approfittato
fondamentalmente vedi bene quale sarebbe il
l’implementazione sembra se la costruiamo
sullo stack di primavera e poi è stato
praticamente impazzire con l’utilizzo di simili
tutte le tecnologie primaverili che potrebbero
aiutami a farlo è molto core
è fondamentalmente solo come dati di primavera su
lo strato di persistenza probabilmente come
atteso che fondamentalmente significa
tutto ciò che è bianco qui è che non lo facciamo
scrivi qualsiasi codice di implementazione che sia
proprio come le interfacce
il livello di servizio per gli ordini
parte gestionale è per questo che io
ho detto che prima usiamo la primavera
in arresto in cima ai repository
direttamente che fondamentalmente significa che otteniamo
tutte le operazioni CRUD fuori
scatola ma prendiamo il tempo per manualmente
implementare il processo di pagamento perché
questo è il nocciolo della nostra API e vogliamo
usare l’hypermedia l’avanzato
ipermedia significa per quello e così il
l’idea di primavera e arresto è perché
toglie il dolore di tutto il
roba standard che vuoi avere come a
post per creare una nuova entità
di che cosa abbiamo tolto il dolore
le cose standard e noiose e
consentono di concentrarsi essenzialmente su
la roba più avanzata che significa
modellando le transizioni ipermediali e
sì, è facile costruire le cose
c’è una certa sfumatura di verde qui
il che significa che modifichiamo l’output di
la primavera che arresta e in sostanza lo dice
il quadro che dovrebbe
includere in determinate circostanze
includere determinati collegamenti in modo che questi link
questi link quindi rimandano al nostro manuale
implementazione del web di arresto
servizio ti mostro l’esempio
in un secondo solo per riassumere alcuni
parti che dovresti guardare se tu
guarda il codice che cerco sempre di provare
mantenere le personalizzazioni Jackson quali
significa personalizzazioni Jason per i non-guidatori
le persone si separano dal modello di dominio
è troppo facile proprio come annotare il
classi di dominio con un inseguimento e ignorare
e cose che puoi sempre esternare
ed è quello che cerco davvero di fare
solo per non mescolare la rappresentazione
parti specifiche con il mio dominio principale noi
utilizzare i dati della molla per le parti crude
questo è quello che ho appena menzionato e il
altro interessante o più interessante
aspetto per quella discussione come tra
come va bene che cosa fa il dominio
e come in realtà gioca nel
progettazione del servizio resto web è il
processori di risorse che è un’API che
fondamentalmente ti permette di dire dati primaverili
riposo
ogni volta che esegui il rendering, per favore chiama
il mio codice in anticipo e poi posso
in realtà aggiungere alcuni collegamenti al
rappresentazione ogni volta che voglio i codici
su Github, naturalmente, lascia che te lo mostri
cosa è un’app di avvio a molla che è solo
il modo migliore per creare app Java queste
giorni probabilmente non sono sorpreso di sentirlo
da parte mia corro prima questa cosa sì, corri
si applica java con il
browser inferno che è la cosa bella con
quello è che non siamo non qualcosa che è
è qualcosa che ho effettivamente costruito
qui nello stagno è per questo che ce l’ho
aperto così io no no no
probabilmente è solo quello che sta succedendo
signore, quanto tempo abbiamo dieci?
minuti c’è un po ‘di processo Java
correndo da qualche parte, non è così
come se tu se avessi una corsa ne hai uno
eseguendo istanza di esso e metti il tuo
MacBook per dormire sì, hai un aspetto migliore
Tutto ok
quindi quella cosa qui è una buona idea
grazie per questo si chiama crowd computing
nel caso tu non ne abbia sentito parlare
localhost: 8080
quindi va bene
hella browser è nessuno mai
Qualcuno di voi non so quale sia la
il browser dell’inferno è un paio di mani va bene lo è
vale la pena menzionare quindi lasciami andare
torna qui e dì HTTP HTTP
aumentare un po ’80 18 quindi la cosa
espone effettivamente una API Web che utilizza il
formato infernale è quello che molla quello
arresti fuori fa fuori dalla scatola e
come il formato che proprio come definisce
quali link appaiono come in JSON e da
la virtù di ciò che puoi costruire un
applicazione
che diavolo di browser fondamentalmente è quello
comprende questi collegamenti e regali
li inseriscono in un formato migliore di come
solo guardando JSON crudo che è
fondamentalmente le cose qui giù proprio così
il browser Hello interpreta quel formato
e vede okay c’è un ordine di riposo
link che ha un titolo così in quel caso
è internazionalizzato e dice come C
o C o creare ordini fondamentalmente perché
Sto usando un browser tedesco, ecco perché
Tedesco qui e poi puoi seguire
questi collegamenti proprio come fare clic su questi
pulsanti qui che lo rende un po ‘più facile
per giocare con la tua API e te
non devi inquinare il tuo codice con
spavalderia sanguinosa e notazioni così sì
questo è il vediamo che è l’an
individuo in un ordine individuale di una tabella
qui quindi stiamo esponendo una collezione
risorsa per gli ordini seguo il link a
ordini e ottenere, come i due di loro ho
creato due e posso solo seguirlo
uno il legame di sé qui no che non lo era
ha ragione, ha rotto qualcosa di no
quello che era giusto ok mi sono incasinato
in D e tu sei qui così come puoi vedere
il servizio espone certo
link in questo caso il link di pagamento
che ho ucciso come problema una richiesta put
per poi e fondamentalmente inviare il mio invio
la mia carta di credito e se lo faccio che
fondamentalmente porta l’ordine in un nuovo
stato che in realtà non contiene il
collegamento di pagamento più ho creato un test
caso per ciò che potremmo concedere brevemente
mi basta uccidere quella cosa ed eseguire il test
caso invece che in realtà e questo è
tipo di pulito per vedere credo
stiamo facendo una cosa in 4 fasi qui
crea un nuovo ordine quindi invia un post
richiesta quindi attivare il pagamento che
è fatto trovando il dolore come noi
scoperto il collegamento con un certo
pagamento quindi il test case agisce sostanzialmente
come un cliente di riposo qui abbiamo scoperto
il link di pagamento afferma che è stato
dato e poi pubblico o metto il mio
informazioni segrete carta di credito per quella
molto molto a quel collegamento che ho appena
trovato qui il link di pagamento giusto e
quello che sto facendo allora e questo perché
è un test che proverò fondamentalmente
elimina l’ordine, quindi prima pago e poi
prova a cancellarlo in modo efficace e poi
assicurarsi che ottengo solo un metodo
totale in questo caso qui lasciami solo
esegui questa cosa molto velocemente per te, lo farò
accedi al primo ordine che non è vero
dove era la risoluzione dello schermo eseguire questo
cosa che probabilmente mi permetterà
basta attenuare questa risoluzione o
la dimensione del carattere un po ‘cosa fa in realtà
dovrebbe essere ancora leggibile
si, ancora meglio, così vedi dove siamo
innescare che stiamo scoprendo il
link di pagamento qui che punta a un nuovo
ordina qui e poi attiva il pagamento
e avviare il processo in background
e quindi estrarre il server per il for
il risultato dell’ordine è molto
di api è qui che lo fanno accadere
o intendo l’ ordine dell’ordine
sottosistema fondamentalmente la colonna di sinistra
del diagramma che hai visto prima
è fondamentalmente che è solo come pochi
classi di dominio che ovviamente sono state utilizzate
Lombok ed esporre un repository e il
integrazione per le cose di pagamento
succede attraverso quell’ordine di pagamento
Processore di risorse, in tal caso, si può volere
per esaminare questa cosa è così
probabilmente la parte interessante
per quanto riguarda l’ipermedia, perché noi
fondamentalmente ottieni l’ordine prima che arrivi
reso e poi
collegamenti al al al al
controller per il controller di pagamento e
vedi che è come guidato da uno stato simile
dell’ordine e se gli ordini pagati noi
proprio come al link di pagamento in yada
yada yada
quindi sì, è un po ‘di una cassetta degli attrezzi
che ti permette di iniziare con esso con a
come profondamente definito per esporre il modello principale
i tuoi aggregati e poi modificare le cose
in esso e utilizzare quel dominio co2 a
trasportare materiale nel HTTP
le rappresentazioni codificano qui qualsiasi domanda
una domanda nella parte posteriore posso ripeterlo
va bene
Va bene, sì la questione era ok per quanto riguarda
il sourcing di eventi e gli eventi stanno dicendo come
funziona bene, così è stato il
cosa il motivo per cui non ho davvero menzionato
perché vale sicuramente la pena parlare
da solo l’altra cosa è che è
non fa davvero parte del DDD quindi non lo è
come se fosse solitamente come un
conseguenza di prendere l’invenzione
modello ad esso il molto estremo ma è
in realtà non fa parte del libro di base I
lo ho cercato quindi è un po ‘gentile
di interessante evento fonte di spada come a
il concetto di lavorare con il dominio
gli eventi sono solo il modo in cui implementare
come mettere un negozio di eventi dedicato
e roba questo non è il non c’è
supporto nel core framework di base
dedicato a che c’è questa
quadro eccellente hai sentito parlare
quello
c’è una struttura basata sulla primavera
che in realtà prende i concetti di un
negozio di eventi e fornisce ghiaccio AP
che ti permette di divertirti come cattura
gli eventi di dominio li memorizzano e poi
creare facilmente un modello di lettura dal da
da quel negozio di eventi e poi
usa quello su richieste di lettura ma c’è
nessuna integrazione dedicata con quello
cosa è che anche con l’evento con
l’evento che ti ha portato a un punto
o vieni ad un punto in cui tu dove
devi scoprire quali sono i
eventi importanti che si desidera
comunicare al cliente che può
fondamentalmente come la transizione di stato di
innescare un diritto di pagamento che è quello
un importante evento importante e tu hai
per comunicarlo al cliente
in qualche modo se lo implementate
usando un consumare quell’evento usando
sourcing di eventi o come con l’ aereo
i repository in realtà non giocano
il modo in cui esponi il tuo servizio web di riposo
quindi a causa di ciò il livello 3 era a
livello 2 in dentro nel mio modello di livellamento lì
era per me era il più importante
perché se tu se ne accerti
eventi o gli eventi più importanti
quelli sono i più importanti per il tuo
i clienti espliciti nel tuo modello è molto
facile mettere alcuni mezzi ipermediali
in cima
di loro per esprimerli ai clienti
questa era la ragione per cui non l’ho fatto
davvero andare oltre, è solo
come se non significasse, non penso
vale la pena farlo o qualcosa del genere
proprio come va bene non voglio finire
complicare l’argomento qui in questo caso
Beh, non è vero
questione di DDD in questo caso perché
come mettere richiede di aggiornare la la
tutta la risorsa e la domanda era per
il pubblico quando useresti la patch
di solito viene usata la patch put per
come aggiornamenti parziali e ce ne sono alcuni
tipi di media come Jason patch e Jason
Unisci patch per esprimere effettivamente le modifiche
a un oggetto o un grafico di un documento sì
la ragione per cui non mi piaceva la patch perché
della sua flessibilità ma non mi piace
patch perché le persone tendono ad abusarne
per colpire cose e come arbitrariamente
cambiare le cose che sono fondamentalmente le
opposto di ciò che cerco di comunicare
qui non naturalmente, naturalmente, non si fa
raccomandare il versioning delle API Penso che il
aspetto fondamentale del riposo è e facendo riposare
è come fare riposo con hypermedia
in realtà un po ‘idiota perché c’è
nessun riposo senza iper media ma il
molti aspetti del riposo ti stanno dando
o le conseguenze di fare riposo sono a
molto più flessibilità in termini di
cambiando la tua API o sì evolvendo il tuo
API che è fondamentalmente ciò che si ottiene da
questo ulteriore sforzo di usare i media iper
e questo significa che hai meno probabilità di farlo
imbattersi in una situazione in cui hai bisogno di cosa
la gente di solito considera come versioning an
API giusta così come da un tipo di media
o i tuoi occhi o qualunque cosa significhi che ci siano
quindi non vuoi farlo perché
sei in ogni inevitabile rottura
clienti con quello e questo significa sforzo
o e questo significa anche sforzo dentro
mantenendo diverse versioni di un’API
così
se non si hanno a che fare non farlo oh
era troppo veloce okay per la tua domanda
va bene
così quello che era la punta di come yeah
si , certo che è un buon punto
così anche i genitori dei DVD non lo sono davvero
discutere l’aspetto del versioning sì
si, certo
si si si si si la domanda è
dove va la logica aziendale più strana
se usi RS stampato perché questo
in pratica prende le operazioni post post
per creare cose e supporta come
cancella se hai una cancellazione sul tuo
repository e quant’altro così ci sono
fondamentalmente eventi che lo alimentano
gli arresti vengono sparati così ogni volta che sei una risorsa
sta per essere creato
ottieni la risorsa prima che sia effettivamente
viene consegnato al deposito in modo che tu possa
intrufolarsi o collegare alcune convalide
logicamente lì , che è qualcosa
quello che di solito è sempre lì dentro
rispetta la sicurezza a molla di sicurezza
annotazioni o out-of-the-box ma così
ci sono gli eventi Rd il primer primario
significa apprezzare il plug-in proprio come Java
basata sulla logica di business ciò che puoi anche
fare è proprio come override selettivo
risorse giuste in modo che potessimo piacere
collegare il proprio controller MVC molla
e dire oh dal modo in cui voglio gestire
metti le richieste per gli ordini io stesso e poi
fai quello che diamine vuoi
punto
diamo quella sì risposta rigorosa
si lo sono io
Non vorrei e penso di averlo dentro
nel nel parlare nel resto
mondo le cose che sai sono
ti presenti e come suggerisce il nome
questi sono identificatori di risorse univoci
le cose che si dovrebbe identificare il
le tue risorse con tutto il resto
deve essere come fatto usando come carriera
risorse o qualcosa in modo da trovare
qualcosa compra qualcosa e questo è molto
più impegno perché fondamentalmente lo sai
devi sapere il tuo modello giusto
devi espandere il tuo modello giusto
devi sapere a quale proprietà
a mettere in là così naturalmente si può andare
avanti e esporre nel modello giusto
questo richiede solo un identificatore del database
e quindi cerca un’istanza di risorsa
da quello, ma fondamentalmente significa questo
il cliente sa che cos’è quell’essere
un identificatore quella parte dell’oggetto
essere identificatore o quella proprietà e se
non è il caso che non mi piace
dire al cliente che è fondamentalmente
se i tuoi occhi sono sufficienti come e
essi dovrebbero essere di solito alright
Io posso dire
devo prendere il treno ma lo facciamo ancora
C’era la volta ok domanda interessante
quindi come ti piaccio davvero?
restituisci il limite al tuo raggio d’azione
proprietà che puoi sempre usare
lezioni in cui hanno fatto in questo caso il
Personalizzazione Jackson Jackson
personalizzazione in modo da poter aggiungere ignorare
l’educazione ignora i campi c’è a
concetto dedicato che abbiamo nel
quadro per proiezioni in modo che tu possa farlo
il lato server definisce un’interfaccia con
solo le proprietà che vuoi esporre
in un certo caso e persino arricchirlo
con con simili chiamate ad altra primavera
fagioli per arricchire la tua rappresentazione se
vuoi così gli altri modi
funziona bene per e quindi il cliente
può davvero chiedere il per quello
proiezione particolare come la chiamiamo così
puoi avere un estratto del cliente e
roba del genere ma probabilmente è come
impiegare troppo tempo per spiegare in dettaglio
ci sono dei mezzi per farlo ed è un ik
qualcosa che affrontiamo esplicitamente
quindi ci sono gli SP per quello che è
bene invece di flettere in una busta
rappresentazione tornerò al sapone
ogni ritorno al sapone ora è tuo
domanda si, è forse intendevo
sì, non ti ho mostrato il
la rappresentazione in realtà esiste
ulteriori informazioni ci sono ancora a
campo che dice lo stato in
pagamento dello stato di rappresentazione previsto
il fatto è che non voglio che il cliente lo faccia
sappi che questo è ed è roba del genere
per lui da mostrare perché possa essere visualizzato
ma non mi piace decidere quando fare cosa
giusto quindi se è se è molto chiaro che
i collegamenti sono le cose che decidono
cosa fare con questo è molto meno
informazioni perché poi posso cambiare
il campo dello stato a qualcos’altro o
che cosa hai, ma se non lo fosse
come costruire su quella proprietà a a
decidere quando visualizza quale pulsante il mio
API è qualcuno sì è molto, molto
sì, non penso che lo spavalderia sia un bene
idea di esprimerla educatamente alla ragione
per quello che intendo è l’ipermedia
non è un argomento per spavalderia c’era a
bigliettaio per aggiungere supporto per quello
completamente rifiutato così che è quello
l’una parte della storia l’altra
l’aspetto è se hai mai fatto così
o fatto la documentazione di swagger e l’uso
le annotazioni nel tuo codice sono
ottenere l’ annotazione all’inferno molto rapidamente
e ho visto un paio di esempi dove
spendono come 10 righe di codice di un
notando quali codici di stato potrebbero essere
restituito e mi piace dal metodo e
quindi all’interno di quello stesso metodo loro
ha restituito un codice di stato diverso in modo da farlo
fondamentalmente soffre del Javadoc
problematico fondamentalmente il
annotazioni che non sono sincronizzate con
ciò che è effettivamente restituito il
la soluzione a ciò è che penso in realtà
scrivere casi di test per il tuo per il tuo
API Web riposante e utilizzo dei casi di test
per documentare in fondo ciò che fa il test
giusto perché è quello che fai
la vostra API in quello che è dimostrato di
lavoro perché altrimenti sarebbe la build
rompere indovina cosa c’è una molla
progetto per quella primavera Red Sox è un
molto giovane, ma è vero
esattamente così potresti usarlo e basta
in realtà ciò che l’autore del progetto
Andy sta attualmente lavorando per mettere
prendendo quella molla Red Sox cosa e
semplicemente manipolando ciò che ha leggermente
per produrne qualche documentazione
produrrà un asciidoctor di default
e può quindi essere incluso in alcuni
scritto manualmente asciidoctor
documentazione primavera ristoranti che è
questo è il link che voglio dare
ti ringrazio per l’attenzione e ti diverti
alla conferenza
design e riposo
il mio nome è oliver geeky lavoro per a
la società ha chiamato chiave ha qualcuno mai
sentito parlare di chiave Oh chiunque abbia mai sentito parlare di
Spring Framework va bene, questo è un po ‘
meglio sì che siamo la società dietro il
Spring Framework Faccio parte della primavera
team di progettazione che si occupa di
progetti di dati primaverili nella loro interezza
in pratica sono e sono il capo del progetto
di quello e potresti chiedertelo perché da ragazzo
chi è come lavorare solo con i dati
fondamentalmente parlando di DDD e resto e
il motivo è che sono coinvolto
in come due aspetti principali della
spazio dati primaverili che è il
spring data store implementations that
sul loro strato superiore esposto a
modello di programmazione di repository che
ci ottiene la connessione a due domini
design guidato e d’altra parte che ho
coniato una piccola biblioteca chiamata primavera
orribile che fondamentalmente porta sostegno
per creare ipertestuali basati
rappresentazioni alla molla MVC
quadro e sulla combinazione di questi due
mondi
Ho anche l’arresto al piombo primaverile
modulo che fondamentalmente sta prendendo il tuo
Spring data repository e li trasforma
in una fondazione per quello che potrebbe essere un
API REST e se la guardi
che non è qui potresti fondamentalmente
penso che stiamo prendendo come i dati da un
database e quindi capovolgere le tabelle
90 gradi e poi gira la svolta
in JSON e chiamarlo in una API così
non è quello che vogliamo fare e
in realtà lo sviluppo di dati di primavera ha resto
mi ha insegnato alcune lezioni sul perché
è una cattiva idea e come potremmo
effettivamente fare meglio e venire dal
dal fatto che il riposo non è ritagliato
usando JSON e HTTP mi sono chiesto ok
qual è ciò che è effettivamente necessario prendere
il tuo modello di dominio o il tuo DDD
modello di dominio
trasformalo in un web di riposo
servizio o per esprimerlo nell’altro modo
in giro se tu se non ne fai nessuno a
particolare o se si, se si evita
pensando a certe cose nel
area ddd quali problemi otterrai quando
costruisci il resto del servizio web proprio così
probabilmente tutti conoscono questo diagramma
eccolo dal libro di Eric Evans
progettazione guidata dal dominio cosa mi piace fare
è concentrarsi su questi aspetti nel
in alto a destra qui come discutere brevemente di me
non voglio fare un’introduzione a
questi concetti perché sto assumendo
sei qui perché già lo sai
loro e basta dare un’occhiata a quelli
concetti dalle conseguenze che loro
di solito hanno come usare questi
concetti e le conseguenze che ha
in quando si costruisce il resto Servizi Web e
rappresentazioni in particolare perché
questo è che sta per essere come il principale
argomento qui come hai visto come se
Sto lavorando a un quadro di primavera che
di solito significa o per lo più significa codifica in
Java quindi alcune delle sfide e cose del genere
potrebbe essere correlato a D al al
la lingua in realtà e altri potrebbero essere a
un po ‘più fortunato qui e il primo
cosa e questo è il motivo per cui l’ho menzionato qui
è valore oggetti oggetti valore sono molto
cosa potente ma sono davvero a
dolore nel culo per costruire a destra Java
quindi se si desidera solo per costruire una e-mail
indirizzo classe come hai costruttori
e poi equivale a codice hash
implementare e tutto questo tipo di cose così
questo è in realtà un motivo per cui le persone
evitare di costruire questi o usare valori
oggetti la cosa più divertente di solito
vedere quando è quando si tratta di come DJ
sono tramite la tua API di validazione gratuita
quando hai una classe che ha una stringa
proprietà che dice indirizzo e-mail e
ha un’annotazione che dice l’ indirizzo email
e poi mi chiedo sempre bene, perché no
lo fai diventare un tipo in primo luogo
ma le persone sono pigre ed è per questo che loro
evitano di usare oggetti di valore a volte
ma la anche se si dispone di chiamarli
manualmente penso che ripaga ancora se
tu fai
credimi, in questo caso c’è questo
come questo discorso su oggetti di valore
ma ho fatto è qualcosa come il
Riferimento della legge di Conway sai parlare di ddd
senza collegarsi a quel discorso eccolo
come tutto su oggetti di valore e come
in pratica ti permettono di controllare
la complessità nel vostro nel codice e fare
codice più facile da capire, quindi questo è
che ha detto che ne valeva ancora la pena
anche se è necessario come codice di loro
manualmente però c’è Lombok che hai
sentito parlare di Lombok prima, quindi se ti piace
non l’ho visto prima di dare un’occhiata
quella
è fondamentalmente un’annotazione del valore aggiunto
sulla classe che in questo caso e che
lo rende abbastanza utilizzabile e facile
per creare quei tipi ancora se tu se
sei se devi prendere un ostacolo netto
ottieni altri avversari ora che tu
avere la lingua fuori del modo in cui si
faccia in letargo iniezione e soprattutto
sono lì il problema è che c’è
ti richiedono di fare cose o è
è difficile scrivere davvero immutabile
tipi o classi con questi framework
in mente giusto quindi devi insegnare loro
come mappare determinate stringhe come una email
indirizzo stringa dal tuo dal tuo JSON
rappresentazione in quella classe e ritorno
e non è davvero difficile non sto dicendo
ma è ingombrante e e
fare qualche sforzo che ancora apprezzi
avere oggetti importanti aspetto importante
qui così entità e repository D
questo è quello con cui la maggior parte della gente si occupa
su base giornaliera anche se hanno
come i campi stringa per gli indirizzi email
nelle loro classi ma il problema
specialmente nello spazio Java è con
c’è JPA, nel caso lo conosci
con quello siamo una specie di tutto
è un’entità giusta, quindi non lo è
il concetto di entità nell’APP no
necessariamente corrisponde a quello in
design basato sul dominio e che lo rende
a volte un po ‘difficile da differenziare
uno da un altro permettimi di darti un
esempio qui diciamo di avere un
cliente che ha un indirizzo e alcuni
informazioni di pagamento qui e in
email corretta e c’è una fattura
indicando il cliente c’è un
ordine che consiste di elementi pubblicitari e
gli elementi pubblicitari indicano il diritto di un prodotto
questa roba si è tradotta in JPA
significherebbe fondamentalmente quell’indirizzo potrebbe
probabilmente essere un’entità l’email come io
detto piuttosto un cliente oggetto valore è
probabilmente un’entità ordina una linea di entità
l’oggetto è un’entità yada yada yada quindi il
è come se avessi provato
per esprimere qui in quel modello ci sono
alcuni gruppi di funzionalità sì
fondamentalmente così tutto ciò che riguarda il
i clienti possono essere leggermente raggruppati qui
e la relazione tra un ordine
e il cliente e un ordine e il
l’elemento pubblicitario è completamente diverso
destra
Credo che si sta cercando quello che sto cercando di
arrivare a che è fondamentalmente che alcuni di
queste entità formano percorsi aggregati e
da quello aggregati intorno a loro e
altri no e questo è qualcosa se tu
guarda le entità nel tuo
applicazione non si mangia veramente il
modello o D il codice non è davvero
svela che è giusto questo concetto
non rivela cosa sia una radice aggregata
dentro nel tuo codice per fortuna a
il repository è definito per essere fondamentalmente I
significa che non è definito in questo modo
ma essenzialmente un’entità più il
repository forma un aggregato perché è
che un aggregato o sì un aggregato
è definito o la radice aggregata in dentro
in particolare è definito come l’unico
la cosa che si interagisce con quella
tiri fuori dal fuori
repository o che crei attraverso a
fabbrica e tutto il contenuto
le entità vengono indicate o utilizzate da
riferendosi a quell’aggregato nel
il primo posto che ha anche il
conseguenza di ciò come l’ aggregato
root o l’aggregato ha il
responsabilità di controllare gli invarianti su
quello su quell’intero aggregato giusto così
fa in modo che tu sia il
aggregato di per sé conforme a certo
vincoli e logica aziendale simile
destra
in modo che significa che se prendiamo il
repository con in considerazione noi
può fondamentalmente trovare tutte le entità che
abbiamo repository per e poi sapere
che i loro aggregati che sono in qualche modo
informazioni utili perché come ho detto
gli aggregati sono come belli o loro
creano una sorta di coerenza
confine e da questo fatto in realtà fanno
per i bei limiti di rappresentazione per
il tuo per la tua domanda per il tuo di
il tuo servizio web
un’altra cosa che gioca su questo è
che gli aggregati sono le cose che tu
di solito si riferiscono a così e alcune parte
di un aggregato come hai visto nel
esempio prima con l’ordine e il
ordina l’elemento pubblicitario in cui è presente la riga
l’articolo si riferisce al prodotto giusto così un a
l’entità nidificata in quell’aggregato è
riferendosi ad alcuni altri aggregati e
è permesso solo riferirsi ad altri
aggregati non alle entità all’interno di altri
aggregati e l’interessante o il
la cosa conveniente qui è quella
perché gli aggregati sono la cosa principale
a cui ti riferisci come puoi bene
traducilo nelle risorse te
esposti sono identificabili e solo
quelle cose che possono si essere identificati
può effettivamente fare riferimento al bene in modo che possiamo
solo creare collegamenti a questi altri
aggregati sono appena tornato come
viaggiando qui da un cliente
workshop con il loro laboratorio clienti
su come costruire un hanno questa eredità
database e vogliono come avvolgere quello
con una bella API e questi ragazzi hanno ottenuto
iniziato con prendiamo la primavera che arresta
e generiamo le nostre entità entità API
dal database perché gli strumenti
ti concede e poi noi per ogni entità
repository creativo e poi ci spostiamo
molla che arresta e poi tutto a
all’improvviso abbiamo un’API REST ed è come
okay, non è proprio quello che in realtà
dovrebbe fare perché come ho detto il
repository trasforma l’entità in uovo
una radice aggregata e se ne hai una molto
modello di tavolo a grana fine e non è così
in realtà non si ha realmente creare tutti
Eero n aggregato – destra
quindi è un punto chiave per sempre
torna a ciò che è il tuo attuale
concerto il tuo modello concettuale attuale e
è quello che ho passato negli ultimi due giorni
facendo effettivamente ricordare loro no , non lo faccio
voglio sapere sui tavoli cosa è cosa
cosa sembra il modello giusto e
è una cosa non facile da fare
ma è che è qualcosa che dovresti
ricordati di un’altra cosa
è venuto in realtà proprio in quello
l’officina è una relazione bidirezionale
sono abbastanza problematici perché
significano fondamentalmente entrambi i lati
devono essere governati tutto il tempo e
Non sono sicuro che questo è un è che è un Java
problema qui, ma soprattutto in in JP
un codice che ho visto molto rotto
rapporti bidirezionali che
è successo a lavorare per caso perché
erano solo molti manipolati dal
parte destra, ma era solo perché
nessuno lo ha manipolato dal torto
lato per caso fondamentalmente okay um oh
sì, c’era una cosa da dire qui
che diventa particolarmente importante se
tu se stai parlando di cosa
costituisce un contesto limitato a destra
relazioni bidirezionali tra
circa nel contesto sono come anche a
versione peggiore di quella cosa
dovresti provare a vincere in primo luogo
va bene così tanto per il molto
divertente le cose fondamentali che non voglio
allungarlo troppo a lungo perché il o
la cosa più interessante di cui parlare
in realtà qui sono eventi di dominio e allora
cosa significa eventi di dominio e
fondamentalmente c’è un in realtà è il
modo in cui esprimi eventi yeah al
dominio come non eventi tecnici ma
come gli eventi aziendali che accadono a questo
dominio e pensiero in questi termini e
la prima cosa che potresti fare è
in pratica non lo fanno affatto bene reti
quello spazio che di solito è il codice che tu
che vedi o se vedi un codice come
questo di solito sembra che tu abbia un
classe che ha getter e setter come
le classi di dominio e le persone chiamano
setter fino in fondo e
questi sono questo è lo stesso sulla stessa
pezzi di software che di solito
capire vestito come crudo su HTTP
giusto in modo da ottenere alcuni dati voi
manipola i dati e lo scrivi di nuovo
giusto è fondamentalmente una base di dati via
HTTP bene così il livello successivo che puoi
arrivare a fare è fondamentalmente rendere il
operazioni ai tipi di dominio espliciti
esponendo metodi su questi due principali
tipi giusto c’è questo è come se fosse
in fondo è quello che cerco di far bollire
giù a se stai chiamando più di uno
setter o se vedi un pezzo di codice
questo causa più di un setter di fila
in pratica ti manca un concetto qui
perché non stai cambiando sai
colpiscilo alla cosa ma tu stai facendo
qualcosa per la cosa e quello dovrebbe
piuttosto essere espresso come un metodo giusto um
l’esempio classico è sebbene non ci sia
potrebbe essere proprio come in realtà è solo
un singolo setter se cambi il
indirizzo su alcuni utenti non dovrebbe essere impostato
indirizzo perché non ne rivela nessuno
conflitto in qualsiasi contesto potrebbe essere come
spostare o qualcosa di giusto a seconda
il tuo dominio, ovviamente, ma sii espressivo
lì ogni volta che vedo codice client o codice
che chiama più di un set su alcuni
obiettare che preferisco presentare il
metodo o più metodo dedicato su
l’oggetto e quindi modificare lo stato
internamente in modo che ti dà abbastanza a
ti dà abbastanza un bel po ‘
già
la prossima cosa o il prossimo livello qui è
esponendo alcune di queste operazioni sul
modello di dominio come eventi ad altri
interessi interessati dei clienti proprio così
fondamentalmente consideri questi
transizioni di stato degli eventi di dominio che
ci porta già nel o
transizioni di stato come eventi principali e
allora questo ci dà davvero un
connessione con il resto del mondo qui
perché questo ci dà già un suggerimento
cosa potremmo fare con questi espliciti
transizioni di stato e come possiamo noi
potrebbe davvero modellarli dentro
nel resto del mondo giusto e un approccio
vedi che in realtà spesso lo è
esportare quegli eventi in via feed giusto
così come un atomo si nutre con il
con le cose rilevanti che altro
le parti potrebbero essere interessate qui e
come quello che si può consumare si potrebbe
usa anche la messaggistica o qualcosa del genere
a
informare le altre parti su quelle
eventi ma come stiamo parlando di riposo
qui ho scelto l’esempio di feed the
il motivo per cui penso al the
motivo particolare per cui penso sia – lo è
probabilmente un altro livello è che esso
non deve significare che stiamo parlando
sul sourcing di eventi a livello 2, a destra
il sourcing di eventi è fondamentalmente o CQRS o
la combinazione dei due è fondamentalmente
portandolo al livello di
trasformando tutto in eventi
giusto così ogni operazione è espressa come
un evento che non necessariamente ha
per essere il caso al livello on 2
perché in questo se sei se lo sei
operando a quel livello che ti piace
decidere bene quali degli eventi
sono davvero necessari per essere memorizzati e quindi
più tardi pubblichi su altri due
le altre parti stanno bene, siamo noi
tornerà al livello due in pochi
minuti quindi ho parlato di come sono stato
coprendo DDD ancora un po ‘e non l’ho fatto
come fatto troppe connessioni o troppo
molte connessioni per riposare ancora così tu
probabilmente tutti lo sanno molto
fondamentale quindi stiamo parlando
risorse che sono identificabili
riferibile e hanno sempre comunicato
con rappresentazioni attraverso e usiamo
un’uniforme di cosa si tratta
interfaccia uniforme ma la cosa principale in
termini di progettazione del api di solito è
progettando così le rappresentazioni
fondamentalmente trovando le risorse che noi
desidera esporre
esplicitamente dicendo che non ti alzi la modellazione
trovare le risorse che vogliamo
esporre e poi decidere cosa va a finire
queste risorse e cosa possiamo fare con
loro da quello che possiamo fare con loro ho di
Certo non intendo come l’individuo
metodi da attivare perché è quello che
che il resto definisce già ma da cui
indicare in quale altro stato questi
le risorse possono essere possono essere trasformate
e come esprimere ciò giusto così io
già fatto il punto che aggrega
sono come una sorta di cosa carina da guardare
in primo luogo, quindi assumendoti
avere il tuo modello di dominio con diciamo
come cinque aggregati o qualcosa del genere
perché in realtà ne rivelano certo
caratteristiche dei caratteri come
l’identificazione si riferisce alla capacità e anche
abbastanza importante la portata della coerenza
perché come le modifiche a un aggregato
dovrebbe essere coerente all’interno del
aggregano ne fanno una bella una bella
fondamento per una risorsa perché mi piace
se tu se metti messo un problema
richiesta al alla risorsa e quello
mappe di confini di consistenza per il tuo dominio
bene, allora non c’è bisogno di pensare
su come transazioni commerciali esplicite
o risorse di transazione transazionale
o elaborare le risorse in primo luogo
Non sto dicendo che è come è
sempre fattibile basta prendere il
aggregare trasformarlo in una risorsa e
la tua offerta sarà terminata
ma è almeno un buon inizio
punto perché le risorse effettivamente condividono
le stesse caratteristiche qui come il
risorse da esporre in um api
giusto, così abbiamo il prossimo
cosa interessante qui in realtà è il
il tema dell’ipermedia
quindi gli ordini ipermediali significano che non vengo
con la sigla impronunciabile
qui, ma fondamentalmente serve come
dati che il cliente è interessato a
con le informazioni di navigazione proprio così
non stiamo tornando solo arbitrariamente
blob blob di JSON ma ne includiamo alcuni
mezzi di comunicazione di link come Let’s
Diciamo che usiamo l’inferno o la raccolta JSON o
sirena o qualsiasi altro formato ipermediale
voglio usare qui HTML e il client
utilizza effettivamente tali informazioni per trovare
fuori cosa può fare con il con
la rappresentazione quindi cosa questo cosa
questo significa in realtà quel cambiamento nel
il client è che diciamo che scrivi e basta
un’app per iPhone e io ne ho uno
esempio di un po ‘di un progetto di esempio
più tardi si stanno facendo ordini di caffè
diciamo che hai un client iPhone con
quello realmente parla con quello con quello
servizio web e inserisco alcuni ordini
il mio nel mio carrello e ora deve piacere
scoprire ok sono autorizzato o voglio
per andare alla cassa destra e il
domanda interessante è come fa il
il cliente in realtà determina se può
effettivamente farlo o dovrebbe presentare il
pulsante per l’ utente e il non
ipermedia
approccio è fondamentalmente sapendo di cosa
il servizio quando il server ci permetterà
alla cassa e il codice che la conoscenza in
il cliente ha ragione, quindi in realtà chiamiamo
Conoscenza del dominio nel client con
ipermedia fondamentalmente scambiamo il
conoscenza della complessità del dominio o
il non scambiamo la conoscenza del dominio
con un po ‘più di complessità nel
protocollo che nel mio precedente
esempio in pratica significa che non siamo realmente
legandoci a qualche conoscenza
questo è documentato da qualche parte ma noi
in realtà basta controllare se un certo
il collegamento è presente nel
rappresentazione e agire sulla presenza
o non presenza di collegamenti proprio così
cliente come tutti noi siamo stati al
discorso precedente qui
santo naturalmente c’era il
la domanda è venuta fuori come fai tu
in realtà consigliamo hypermedia e il
rispondi pure sì gente
Piuttosto mi piace solo prendere il Jason
e Paul
rimandalo indietro e colpiscilo e roba
va bene, ma se ti va
impedire che la conoscenza del dominio venga a mancare
nel client, quindi hypermedia è il tuo
l’unica opzione ed è in realtà lo è
molto allineato alla nozione di
design guidato dal dominio che cerca di mantenere
la complessità di un sistema software
nel suo nucleo e in quel caso in
caso di api di riposo che di solito significa
il server giusto
quindi scambiamo questo il protocollo
complessità a cui è ovviamente esposto
il cliente così perché tutto ad un tratto
deve conoscere collegamenti e ipermedia
formati e yada yada yada
con il con lo scambiamo
complessità con la preferenza
o il vantaggio di non perdere il dominio
conoscenza al cliente o meno dominio
conoscenza nel client perché è
appena collegato presente o no sì così
un’altra cosa che gioca su questo è
che è un solo generale
raccomandazione Sto ancora provenienti da
quella discussione che va bene lo facciamo
come la nostra risorsa e poi la patch
come un matto e sappiamo solo quali campi
dobbiamo aggiornare quando bla bla bla così
se vuoi impedire questa conoscenza
da perdite nel cliente non mi piace
se alcuni client usano un metodo patch
è molto spesso qualcosa che guardo
e vedi okay è davvero la cosa
che dovrebbe fare o dovrebbe piuttosto
come cercare un link e poi seguire
quel collegamento e descriviamo formalmente come
come server descriviamo cosa
link effettivamente fa e in quale circuito
circostanze in realtà sembra giusto
Tutto ok
l’ultima cosa su quel fronte è quella
se stai implementando un modello di dominio
tu codi sul server allora tu
di solito sono esposti a parecchi
aspetti tecnici a cui piace giocare
l’implementazione ed è qualcosa
è una è una buona idea per fare in realtà
sicuro che questi tecnici o lato server
aspetti non perdono nel cliente che
in realtà significa che devi prendere
cura di trasformarli in web
adeguata
perché molto spesso le volte l’HTTP o
come il riposo in generale ha determinati mezzi
per ottenere certe cose che potresti
basta mappare questi lato server
implementazione di cose specifiche a cosa
Sto parlando della prima cosa è
questa è fondamentalmente la regola che volevo
in primo luogo o inventato
le sue radici aggregate diventano risorse in
il primo posto e un modello comune voi
vedere e questo è probabilmente un po ‘di
my my my flavour of the worldview here
perché abbiamo a che fare con i repository
per tutto il tempo mappano molto molto bene
sulla raccolta e sulle risorse dell’articolo a
dire tagliare i clienti e tagliare i clienti
ID slash molto simile al
lato server e il client non dovrebbe
cura dei tuoi occhi come ho detto ma da
il punto di vista del design lato server
che è questa è una bella partita il
relazioni tra o verso altri aggregati
diventare collegamenti nella rappresentazione
questo è in realtà ciò che non voglio essere
troppo specifico per l’implementazione qui ma
questo è ciò che fa sorgere il resto
fondamentalmente fa bene analizza il tuo
il tuo scopre sulle entità
che sono gestiti da repository e
ogni volta che un oggetto dominio fa riferimento a
un’altra entità gestita dal repository
diventa un collegamento invece di essere
incorporato e che naturalmente forma quelli
come le rappresentazioni aggregate e e
l’utilizzo utilizzando aspetti ipermediali i
mostraci un esempio in un po ‘molto
cosa importante i tuoi occhi sono i tuoi occhi
sono i tuoi occhi o ID i nostri ID sono ID
c’è un sacco di biglietti in corso o
essendo stato aperto in primavera, aveva avuto un arresto
chiesto perché è l’ identificatore del database
non contenuta nella rappresentazione
perché la risorsa è identificata tramite
il suo uri come suggerisce il nome grazioso
semplice ma il più meta storia qui
è che ci sono alcune proprietà
nel tuo codice o alcuni alcuni artefatti
nel tuo codice in realtà appartengono a un
molto simile
porta specifica come implementazione o
e non dovrebbero apparire davvero
nella nella nella rappresentazione
giusto perché in realtà sarebbero perdite
le informazioni qui lo stesso vale per il
proprietà della versione dell’annuncio nel per quelle
di te non dallo spazio Java JP a o
l’API di persistenza Java ha un a
meccanismo di fare blocco ottimistico
a destra il the il server conta fino a
versione per ogni operazione sicura in modo che
quando tu leggi un’entità, facciamolo
dire che ottengo clienti con la versione uno allora
qualcuno alle mie spalle aggiorna il
cliente che rende la versione due sul
server e invio che voglio aggiornare il
cliente poi di nuovo con me l’invio
versione uno che verrà respinta
perché sì, in pratica mando un
versione obsoleta la cosa è quella roba
che non dovrebbe necessariamente farlo o
non dovrebbe davvero farcela nel
rappresentazione perché c’è un HTTP
HTTP significa per quello o in qualche modo per
in realtà rappresentano ciò che è
fondamentalmente e-tax
in modo da poter usare get condizionale
richieste o come ho appena delineato il
aggiornare condizionale condizionale dello scenario
metti le richieste giuste, quindi sostanzialmente ci muoviamo
roba dall’oggetto dominio nel
appropriato in questo caso intestazioni HTTP
lo stesso vale per lo stesso vale per te
con un’ultima proprietà modificata, quindi non c’è
significa in entrata in dati di primavera in questo caso
per ottenere automaticamente l’ultima modifica
set di proprietà e trasformiamo quella proprietà
nell’intestazione dell’ultima modifica
questo è fondamentalmente il tipo di D che è
la stessa cosa va bene così è 30
minuti per darti un esempio di cosa
questo potrebbe sembrare come messo dentro
codice che ho creato
o in realtà molto tempo fa ho creato
questa cosa c’è questo libro di Ian
Robinson Jim Weber e quel ragazzo che vorrei
sempre non è riuscito a pronunciare correttamente
siwash ha passato adidas o qualcosa del genere
O’Reilly Restful Web Services è quello
quello che ho sempre mescolato li ha arrestati
pratica grazie per questo l’altro
anche uno va bene, quindi non voglio offenderti
chiunque qui è il nucleo di quello di
il libro è come ho detto questo lo Starbucks
tipo di esperienza di acquisto e modellazione
il flusso di ordinamento di quello di un di a
negozio come quello in un’API e ha un
divertente o abbastanza interessante è un
esempio interessante perché è molto
minuscolo è molto facile da guardare perché
ogni volta intendo che tutti possono identificarsi
bere caffè o tè o cosa hai
ed è davvero che non è niente di speciale
ma contiene un bel po ‘di
aspetti interessanti di un più complesso
API non è solo come non è solo
crude su HTTP giusto così che qui
il o che è il tipo di diagramma di stato
è fondamentalmente il flusso degli ordini proprio noi
metti un ordine che lo stato di transizione uno
mentre l’ordine è nello stato
di pagamento previsto posso aggiornarlo
che è che è quello effettivamente che
parte dove una sorta di operazioni grossolane
stanno bene proprio perché è così
in pratica è esattamente quello
molto tornando allo stesso stato qui
e stiamo solo aggiornando un aggiornamento potrebbe
a nuovo a nuove bevande per l’ordine
cosa hai
potresti modellarlo attraverso un esplicito
transizione di stato pure, ma nel
l’implementazione vado solo con a
post o patch richiesta di patch in questo caso
ma poi ci sono due interessanti
le transizioni di stato sono simili a quelle
annullando l’ordine e uno è il
pagando in questo caso che pone l’ordine
in una specie di stato di preparazione, allora è così
è elaborato in background
praticamente fino a quando non è pronto
stato e quindi devo farlo esplicitamente
Riconoscere che ho ricevuto l’ordine di
portarlo in uno stato completato, quindi se
vai avanti e ingenuamente modellalo
con o diciamo che anche tu potresti modellare
in questo modo giusto
o anche come documentarlo in questo modo
probabilmente non vuoi farlo perché
esponi qui i tuoi schemi oculari quali
qualcosa che probabilmente non vuoi
da fare e ancora più interessante
aspetto per questo scenario è qui
che ci sono alcuni vincoli
a quando puoi interagire con quale
risorsa in che modo giusto per te
puoi solo te lo puoi permettere
attivare il pagamento se l’ordine è
in quel particolare stato giusto e se io
prendere quel tipo di ordine o quello
descrizione dell’API come sviluppatore client
Fondamentalmente dovevo ora andare avanti e
dire e vedere scoprire cosa fa il pagamento
atteso in realtà significa e poi ho
probabilmente ispezionare la rappresentazione
per determinati campi di determinati valori e
cosa-hai-tu e tutta la roba che
Ho bisogno di infornare i miei clienti per sapere
quando posso effettivamente presentare il pulsante
alla fine rilasciare quella chiamata di riposo
ecco quindi se lo prendi leggermente
in modo diverso e dichiara semplicemente la risorsa
tipi e dire ok ogni volta che trovi un
link di pagamento o tipi di relazione in questo
caso perché sì ogni volta che trovi un
collegamento di pagamento si può solo questione di
corso una richiesta e poi lo hai
per definire il pagamento che è necessario
andare con esso e quindi si invia l’ordine
e questo in realtà ti porta molto
più vicino a D al dominio attuale
qui e l’ implementazione del
del dominio incontra porta la scatola di riposo
è proprio come c’è un
implementazione basata su jax-rs in questo
nel libro stesso ne ho approfittato
fondamentalmente vedi bene quale sarebbe il
l’implementazione sembra se la costruiamo
sullo stack di primavera e poi è stato
praticamente impazzire con l’utilizzo di simili
tutte le tecnologie primaverili che potrebbero
aiutami a farlo è molto core
è fondamentalmente solo come dati di primavera su
lo strato di persistenza probabilmente come
atteso che fondamentalmente significa
tutto ciò che è bianco qui è che non lo facciamo
scrivi qualsiasi codice di implementazione che sia
proprio come le interfacce
il livello di servizio per gli ordini
parte gestionale è per questo che io
ho detto che prima usiamo la primavera
in arresto in cima ai repository
direttamente che fondamentalmente significa che otteniamo
tutte le operazioni CRUD fuori
scatola ma prendiamo il tempo per manualmente
implementare il processo di pagamento perché
questo è il nocciolo della nostra API e vogliamo
usare l’hypermedia l’avanzato
ipermedia significa per quello e così il
l’idea di primavera e arresto è perché
toglie il dolore di tutto il
roba standard che vuoi avere come a
post per creare una nuova entità
di che cosa abbiamo tolto il dolore
le cose standard e noiose e
consentono di concentrarsi essenzialmente su
la roba più avanzata che significa
modellando le transizioni ipermediali e
sì, è facile costruire le cose
c’è una certa sfumatura di verde qui
il che significa che modifichiamo l’output di
la primavera che arresta e in sostanza lo dice
il quadro che dovrebbe
includere in determinate circostanze
includere determinati collegamenti in modo che questi link
questi link quindi rimandano al nostro manuale
implementazione del web di arresto
servizio ti mostro l’esempio
in un secondo solo per riassumere alcuni
parti che dovresti guardare se tu
guarda il codice che cerco sempre di provare
mantenere le personalizzazioni Jackson quali
significa personalizzazioni Jason per i non-guidatori
le persone si separano dal modello di dominio
è troppo facile proprio come annotare il
classi di dominio con un inseguimento e ignorare
e cose che puoi sempre esternare
ed è quello che cerco davvero di fare
solo per non mescolare la rappresentazione
parti specifiche con il mio dominio principale noi
utilizzare i dati della molla per le parti crude
questo è quello che ho appena menzionato e il
altro interessante o più interessante
aspetto per quella discussione come tra
come va bene che cosa fa il dominio
e come in realtà gioca nel
progettazione del servizio resto web è il
processori di risorse che è un’API che
fondamentalmente ti permette di dire dati primaverili
riposo
ogni volta che esegui il rendering, per favore chiama
il mio codice in anticipo e poi posso
in realtà aggiungere alcuni collegamenti al
rappresentazione ogni volta che voglio i codici
su Github, naturalmente, lascia che te lo mostri
cosa è un’app di avvio a molla che è solo
il modo migliore per creare app Java queste
giorni probabilmente non sono sorpreso di sentirlo
da parte mia corro prima questa cosa sì, corri
si applica java con il
browser inferno che è la cosa bella con
quello è che non siamo non qualcosa che è
è qualcosa che ho effettivamente costruito
qui nello stagno è per questo che ce l’ho
aperto così io no no no
probabilmente è solo quello che sta succedendo
signore, quanto tempo abbiamo dieci?
minuti c’è un po ‘di processo Java
correndo da qualche parte, non è così
come se tu se avessi una corsa ne hai uno
eseguendo istanza di esso e metti il tuo
MacBook per dormire sì, hai un aspetto migliore
Tutto ok
quindi quella cosa qui è una buona idea
grazie per questo si chiama crowd computing
nel caso tu non ne abbia sentito parlare
localhost: 8080
quindi va bene
hella browser è nessuno mai
Qualcuno di voi non so quale sia la
il browser dell’inferno è un paio di mani va bene lo è
vale la pena menzionare quindi lasciami andare
torna qui e dì HTTP HTTP
aumentare un po ’80 18 quindi la cosa
espone effettivamente una API Web che utilizza il
formato infernale è quello che molla quello
arresti fuori fa fuori dalla scatola e
come il formato che proprio come definisce
quali link appaiono come in JSON e da
la virtù di ciò che puoi costruire un
applicazione
che diavolo di browser fondamentalmente è quello
comprende questi collegamenti e regali
li inseriscono in un formato migliore di come
solo guardando JSON crudo che è
fondamentalmente le cose qui giù proprio così
il browser Hello interpreta quel formato
e vede okay c’è un ordine di riposo
link che ha un titolo così in quel caso
è internazionalizzato e dice come C
o C o creare ordini fondamentalmente perché
Sto usando un browser tedesco, ecco perché
Tedesco qui e poi puoi seguire
questi collegamenti proprio come fare clic su questi
pulsanti qui che lo rende un po ‘più facile
per giocare con la tua API e te
non devi inquinare il tuo codice con
spavalderia sanguinosa e notazioni così sì
questo è il vediamo che è l’an
individuo in un ordine individuale di una tabella
qui quindi stiamo esponendo una collezione
risorsa per gli ordini seguo il link a
ordini e ottenere, come i due di loro ho
creato due e posso solo seguirlo
uno il legame di sé qui no che non lo era
ha ragione, ha rotto qualcosa di no
quello che era giusto ok mi sono incasinato
in D e tu sei qui così come puoi vedere
il servizio espone certo
link in questo caso il link di pagamento
che ho ucciso come problema una richiesta put
per poi e fondamentalmente inviare il mio invio
la mia carta di credito e se lo faccio che
fondamentalmente porta l’ordine in un nuovo
stato che in realtà non contiene il
collegamento di pagamento più ho creato un test
caso per ciò che potremmo concedere brevemente
mi basta uccidere quella cosa ed eseguire il test
caso invece che in realtà e questo è
tipo di pulito per vedere credo
stiamo facendo una cosa in 4 fasi qui
crea un nuovo ordine quindi invia un post
richiesta quindi attivare il pagamento che
è fatto trovando il dolore come noi
scoperto il collegamento con un certo
pagamento quindi il test case agisce sostanzialmente
come un cliente di riposo qui abbiamo scoperto
il link di pagamento afferma che è stato
dato e poi pubblico o metto il mio
informazioni segrete carta di credito per quella
molto molto a quel collegamento che ho appena
trovato qui il link di pagamento giusto e
quello che sto facendo allora e questo perché
è un test che proverò fondamentalmente
elimina l’ordine, quindi prima pago e poi
prova a cancellarlo in modo efficace e poi
assicurarsi che ottengo solo un metodo
totale in questo caso qui lasciami solo
esegui questa cosa molto velocemente per te, lo farò
accedi al primo ordine che non è vero
dove era la risoluzione dello schermo eseguire questo
cosa che probabilmente mi permetterà
basta attenuare questa risoluzione o
la dimensione del carattere un po ‘cosa fa in realtà
dovrebbe essere ancora leggibile
si, ancora meglio, così vedi dove siamo
innescare che stiamo scoprendo il
link di pagamento qui che punta a un nuovo
ordina qui e poi attiva il pagamento
e avviare il processo in background
e quindi estrarre il server per il for
il risultato dell’ordine è molto
di api è qui che lo fanno accadere
o intendo l’ ordine dell’ordine
sottosistema fondamentalmente la colonna di sinistra
del diagramma che hai visto prima
è fondamentalmente che è solo come pochi
classi di dominio che ovviamente sono state utilizzate
Lombok ed esporre un repository e il
integrazione per le cose di pagamento
succede attraverso quell’ordine di pagamento
Processore di risorse, in tal caso, si può volere
per esaminare questa cosa è così
probabilmente la parte interessante
per quanto riguarda l’ipermedia, perché noi
fondamentalmente ottieni l’ordine prima che arrivi
reso e poi
collegamenti al al al al
controller per il controller di pagamento e
vedi che è come guidato da uno stato simile
dell’ordine e se gli ordini pagati noi
proprio come al link di pagamento in yada
yada yada
quindi sì, è un po ‘di una cassetta degli attrezzi
che ti permette di iniziare con esso con a
come profondamente definito per esporre il modello principale
i tuoi aggregati e poi modificare le cose
in esso e utilizzare quel dominio co2 a
trasportare materiale nel HTTP
le rappresentazioni codificano qui qualsiasi domanda
una domanda nella parte posteriore posso ripeterlo
va bene
Va bene, sì la questione era ok per quanto riguarda
il sourcing di eventi e gli eventi stanno dicendo come
funziona bene, così è stato il
cosa il motivo per cui non ho davvero menzionato
perché vale sicuramente la pena parlare
da solo l’altra cosa è che è
non fa davvero parte del DDD quindi non lo è
come se fosse solitamente come un
conseguenza di prendere l’invenzione
modello ad esso il molto estremo ma è
in realtà non fa parte del libro di base I
lo ho cercato quindi è un po ‘gentile
di interessante evento fonte di spada come a
il concetto di lavorare con il dominio
gli eventi sono solo il modo in cui implementare
come mettere un negozio di eventi dedicato
e roba questo non è il non c’è
supporto nel core framework di base
dedicato a che c’è questa
quadro eccellente hai sentito parlare
quello
c’è una struttura basata sulla primavera
che in realtà prende i concetti di un
negozio di eventi e fornisce ghiaccio AP
che ti permette di divertirti come cattura
gli eventi di dominio li memorizzano e poi
creare facilmente un modello di lettura dal da
da quel negozio di eventi e poi
usa quello su richieste di lettura ma c’è
nessuna integrazione dedicata con quello
cosa è che anche con l’evento con
l’evento che ti ha portato a un punto
o vieni ad un punto in cui tu dove
devi scoprire quali sono i
eventi importanti che si desidera
comunicare al cliente che può
fondamentalmente come la transizione di stato di
innescare un diritto di pagamento che è quello
un importante evento importante e tu hai
per comunicarlo al cliente
in qualche modo se lo implementate
usando un consumare quell’evento usando
sourcing di eventi o come con l’ aereo
i repository in realtà non giocano
il modo in cui esponi il tuo servizio web di riposo
quindi a causa di ciò il livello 3 era a
livello 2 in dentro nel mio modello di livellamento lì
era per me era il più importante
perché se tu se ne accerti
eventi o gli eventi più importanti
quelli sono i più importanti per il tuo
i clienti espliciti nel tuo modello è molto
facile mettere alcuni mezzi ipermediali
in cima
di loro per esprimerli ai clienti
questa era la ragione per cui non l’ho fatto
davvero andare oltre, è solo
come se non significasse, non penso
vale la pena farlo o qualcosa del genere
proprio come va bene non voglio finire
complicare l’argomento qui in questo caso
Beh, non è vero
questione di DDD in questo caso perché
come mettere richiede di aggiornare la la
tutta la risorsa e la domanda era per
il pubblico quando useresti la patch
di solito viene usata la patch put per
come aggiornamenti parziali e ce ne sono alcuni
tipi di media come Jason patch e Jason
Unisci patch per esprimere effettivamente le modifiche
a un oggetto o un grafico di un documento sì
la ragione per cui non mi piaceva la patch perché
della sua flessibilità ma non mi piace
patch perché le persone tendono ad abusarne
per colpire cose e come arbitrariamente
cambiare le cose che sono fondamentalmente le
opposto di ciò che cerco di comunicare
qui non naturalmente, naturalmente, non si fa
raccomandare il versioning delle API Penso che il
aspetto fondamentale del riposo è e facendo riposare
è come fare riposo con hypermedia
in realtà un po ‘idiota perché c’è
nessun riposo senza iper media ma il
molti aspetti del riposo ti stanno dando
o le conseguenze di fare riposo sono a
molto più flessibilità in termini di
cambiando la tua API o sì evolvendo il tuo
API che è fondamentalmente ciò che si ottiene da
questo ulteriore sforzo di usare i media iper
e questo significa che hai meno probabilità di farlo
imbattersi in una situazione in cui hai bisogno di cosa
la gente di solito considera come versioning an
API giusta così come da un tipo di media
o i tuoi occhi o qualunque cosa significhi che ci siano
quindi non vuoi farlo perché
sei in ogni inevitabile rottura
clienti con quello e questo significa sforzo
o e questo significa anche sforzo dentro
mantenendo diverse versioni di un’API
così
se non si hanno a che fare non farlo oh
era troppo veloce okay per la tua domanda
va bene
così quello che era la punta di come yeah
si , certo che è un buon punto
così anche i genitori dei DVD non lo sono davvero
discutere l’aspetto del versioning sì
si, certo
si si si si si la domanda è
dove va la logica aziendale più strana
se usi RS stampato perché questo
in pratica prende le operazioni post post
per creare cose e supporta come
cancella se hai una cancellazione sul tuo
repository e quant’altro così ci sono
fondamentalmente eventi che lo alimentano
gli arresti vengono sparati così ogni volta che sei una risorsa
sta per essere creato
ottieni la risorsa prima che sia effettivamente
viene consegnato al deposito in modo che tu possa
intrufolarsi o collegare alcune convalide
logicamente lì , che è qualcosa
quello che di solito è sempre lì dentro
rispetta la sicurezza a molla di sicurezza
annotazioni o out-of-the-box ma così
ci sono gli eventi Rd il primer primario
significa apprezzare il plug-in proprio come Java
basata sulla logica di business ciò che puoi anche
fare è proprio come override selettivo
risorse giuste in modo che potessimo piacere
collegare il proprio controller MVC molla
e dire oh dal modo in cui voglio gestire
metti le richieste per gli ordini io stesso e poi
fai quello che diamine vuoi
punto
diamo quella sì risposta rigorosa
si lo sono io
Non vorrei e penso di averlo dentro
nel nel parlare nel resto
mondo le cose che sai sono
ti presenti e come suggerisce il nome
questi sono identificatori di risorse univoci
le cose che si dovrebbe identificare il
le tue risorse con tutto il resto
deve essere come fatto usando come carriera
risorse o qualcosa in modo da trovare
qualcosa compra qualcosa e questo è molto
più impegno perché fondamentalmente lo sai
devi sapere il tuo modello giusto
devi espandere il tuo modello giusto
devi sapere a quale proprietà
a mettere in là così naturalmente si può andare
avanti e esporre nel modello giusto
questo richiede solo un identificatore del database
e quindi cerca un’istanza di risorsa
da quello, ma fondamentalmente significa questo
il cliente sa che cos’è quell’essere
un identificatore quella parte dell’oggetto
essere identificatore o quella proprietà e se
non è il caso che non mi piace
dire al cliente che è fondamentalmente
se i tuoi occhi sono sufficienti come e
essi dovrebbero essere di solito alright
Io posso dire
devo prendere il treno ma lo facciamo ancora
C’era la volta ok domanda interessante
quindi come ti piaccio davvero?
restituisci il limite al tuo raggio d’azione
proprietà che puoi sempre usare
lezioni in cui hanno fatto in questo caso il
Personalizzazione Jackson Jackson
personalizzazione in modo da poter aggiungere ignorare
l’educazione ignora i campi c’è a
concetto dedicato che abbiamo nel
quadro per proiezioni in modo che tu possa farlo
il lato server definisce un’interfaccia con
solo le proprietà che vuoi esporre
in un certo caso e persino arricchirlo
con con simili chiamate ad altra primavera
fagioli per arricchire la tua rappresentazione se
vuoi così gli altri modi
funziona bene per e quindi il cliente
può davvero chiedere il per quello
proiezione particolare come la chiamiamo così
puoi avere un estratto del cliente e
roba del genere ma probabilmente è come
impiegare troppo tempo per spiegare in dettaglio
ci sono dei mezzi per farlo ed è un ik
qualcosa che affrontiamo esplicitamente
quindi ci sono gli SP per quello che è
bene invece di flettere in una busta
rappresentazione tornerò al sapone
ogni ritorno al sapone ora è tuo
domanda si, è forse intendevo
sì, non ti ho mostrato il
la rappresentazione in realtà esiste
ulteriori informazioni ci sono ancora a
campo che dice lo stato in
pagamento dello stato di rappresentazione previsto
il fatto è che non voglio che il cliente lo faccia
sappi che questo è ed è roba del genere
per lui da mostrare perché possa essere visualizzato
ma non mi piace decidere quando fare cosa
giusto quindi se è se è molto chiaro che
i collegamenti sono le cose che decidono
cosa fare con questo è molto meno
informazioni perché poi posso cambiare
il campo dello stato a qualcos’altro o
che cosa hai, ma se non lo fosse
come costruire su quella proprietà a a
decidere quando visualizza quale pulsante il mio
API è qualcuno sì è molto, molto
sì, non penso che lo spavalderia sia un bene
idea di esprimerla educatamente alla ragione
per quello che intendo è l’ipermedia
non è un argomento per spavalderia c’era a
bigliettaio per aggiungere supporto per quello
completamente rifiutato così che è quello
l’una parte della storia l’altra
l’aspetto è se hai mai fatto così
o fatto la documentazione di swagger e l’uso
le annotazioni nel tuo codice sono
ottenere l’ annotazione all’inferno molto rapidamente
e ho visto un paio di esempi dove
spendono come 10 righe di codice di un
notando quali codici di stato potrebbero essere
restituito e mi piace dal metodo e
quindi all’interno di quello stesso metodo loro
ha restituito un codice di stato diverso in modo da farlo
fondamentalmente soffre del Javadoc
problematico fondamentalmente il
annotazioni che non sono sincronizzate con
ciò che è effettivamente restituito il
la soluzione a ciò è che penso in realtà
scrivere casi di test per il tuo per il tuo
API Web riposante e utilizzo dei casi di test
per documentare in fondo ciò che fa il test
giusto perché è quello che fai
la vostra API in quello che è dimostrato di
lavoro perché altrimenti sarebbe la build
rompere indovina cosa c’è una molla
progetto per quella primavera Red Sox è un
molto giovane, ma è vero
esattamente così potresti usarlo e basta
in realtà ciò che l’autore del progetto
Andy sta attualmente lavorando per mettere
prendendo quella molla Red Sox cosa e
semplicemente manipolando ciò che ha leggermente
per produrne qualche documentazione
produrrà un asciidoctor di default
e può quindi essere incluso in alcuni
scritto manualmente asciidoctor
documentazione primavera ristoranti che è
questo è il link che voglio dare
ti ringrazio per l’attenzione e ti diverti
alla conferenza
Please follow and like us: