
[Musica]
scendi da me
possiamo sentirmi ok si così benvenuto
questo discorso non è figo o pubblicizzato o
alla moda , si tratta di modulare
monoliti di cui uno sfondo dice discorsi
giusto così sono su Twitter e un numero di
anni fa ho detto questo lo sai se tu
non è possibile costruire un monolite decente no
fastidio nei microservizi perché ho visto a
molte persone saltano sui microfoni all’estero
e loro erano destinati a fallire e io
pensavo che fosse molto saggezza e così
ha fatto 305 altre persone
esattamente però tieni il tuo applauso che ho ricevuto
completamente surclassato dall’architetto
cliffie Vedo che hai una struttura poli
monolite vorresti che io lo convertissi
in una serie di poli set di
microservices 4.000 quindi posso grandezza
più l’altro modo di guardare questo è
quello e quello è essenzialmente che cosa questo
parla tutto per quelli che non lo fanno
conoscimi mi chiamo Simon Brown, sono un
consulente indipendente specializzato in
architettura software sono l’autore di
un paio di libri di architettura del software
che puoi trovare su lean pub comm I
ha anche scritto un capitolo su Zio Bob
Il libro di architettura pulito di Martin
recentemente il capitolo è chiamato il
capitolo mancante è lì perché lo faccio
avere una copia e tutto il materiale in
mancano essenzialmente i capitoli di questo
il discorso riguarda oltre a tutti
di questa roba sono il creatore del c4
modello che spiegherò tra un secondo ma
in poche parole è un insieme gerarchico di
diagrammi di architettura per descrivere
sistemi di architettura del software e io sono
il fondatore / codice principale scimmia /
tutto il resto di una società chiamata
struttura Iser che è un insieme di strumenti
creare diagrammi di ottava perché li porto
queste due cose prima di tutto è il
la struttura di Iser è il lato server
fondamentalmente a Java primavera e vediamo il web
applicazioni – monoliti modulari in esecuzione
sulla fondamentale fonderia di cloud per i servizi Web
piattaforma quindi tutte le cose di cui sto parlando
in questo discorso che sto effettivamente usando
io che spesso chiamiamo questo cane Fooding
che è orribile
ma ci andiamo io non sto usando docker o
comunità o microsomi o altro
così così ancora una volta questo è tutto
roba vecchio stile e inoltre se
hai una buona struttura del codice è facile
per visualizzarlo in modo che è il tipo di dove
Sono più interessato a questo modulo
roba monolite da c4 c4 è il mio
tecnica di diagrammi il suo contesto
contenitori componenti in codice e tu
può trovare maggiori informazioni a riguardo a
c4 modello comm per darti un rapido
introduzione quindi questo è un contesto di sistema
diagramma per un sistema che ho costruito una volta su a
tempo fondamentalmente
Ho costruito questa cosa qui come diversa
tipi di utenti e diversi sistemi
connessioni facciamo lo zoom in quel sistema e
mostriamo i contenitori al suo interno
contenitore intendo applicazione o
datastore quindi qui possiamo vederlo
c’è un’applicazione web un’altra java
applicazione e un mucchio di data store
cose che ingrandiamo in questo aggiornamento del contenuto
a questa applicazione java e ci arriviamo
vedere i componenti interni che java
l’applicazione è di nuovo piacevole e facile
è tutto bello e gerarchico
avviso nell’angolo in alto a destra c’è
un componente tweet ora i tweet
componente in questo caso è giusto
responsabile di inserire i tweet in a
Archivio dati Mongo e recupero di tweet
di nuovo quindi questo è il livello 3 della mia C per
diagrammi quindi ingrandiamo questo singolo
box il componente tweet e ci arriviamo
guarda il codice che lo implementa ora cosa
hai notato bene il precedente
diagramma c’era una casella chiamata tweet
componente e ora ti ho mostrato il
codice non c’è una casella chiamata tweet
componente è andato componente tweet fa
in realtà non esiste dove è andato il
componente tweet è in realtà un mucchio di
Interfacce Java in questo caso e Java
classi attraverso un’architettura a strati così
abbiamo avuto questa bella storia semplice
svolgendosi e poi ci siamo arrivati
livello di codice finale la storia si fermò
lavorando ed è a questo punto dove
la gente dice bene questo in realtà no
perché sai che componente tweet
esisto concettualmente sì immagino così ho
significa che è un raggruppamento concettuale di a
un sacco di interfacce e classi Java ma
non è questo il punto qui il punto qui
è quella qualsiasi astrazione che usiamo
descrivere il nostro software dovrebbe riflettere il
codice e viceversa e questo è
essenzialmente di cosa parla questo discorso
c’è un grande libro sul software
architettura farò riferimento a chiamato
solo abbastanza architettura software di
George Fairbanks
in questo libro George parla di ciò che lui
chiama il code code del modello quindi scegli il
scena sei al lavoro stai avendo un
discussione di architettura con il tuo
amici e colleghi e durante questo
discussione che userete
parole come il servizio componente modulo
sottosistema di livello chi è uno sviluppatore Java
sei un buon chunky eccellente così in Java
parliamo spesso di costruire strati
le applicazioni sì, Java ha un livello
parola chiave Oh , Java ha un componente
parola chiave non proprio e questo è il
problema delle lingue che usiamo e
questo vale per la maggior parte delle altre lingue come
bene le lingue che utilizziamo non hanno
questi costrutti architettonici come
cittadini di prima classe come di prima classe
parole chiave allora questo è il codice di modello mancante
quindi abbiamo parlato di un modulo o di un servizio
o un livello e se non è possibile mapparli
concetti nella base del codice c’è a
mancata corrispondenza non c’è una discrepanza tra
questi due modi di pensare dal basso verso l’alto
contro top-down questo è il codice del modello
gap l’altro modo di pensare a questo è
Immagino che ho chiesto di disegnare me un
diagramma dell’architettura del tuo software
probabilmente mi attirerai un po ‘alto
livello componenti moduli immagine
servizi ecc. e come interagiscono con lei
runtime se dovessi trovare alcuni strumenti
per decodificare un diagramma dal tuo
codice reale non ho intenzione di ottenere
lo stesso diagramma sono io
Ho intenzione di ottenere un livello molto basso molto
diagramma preciso che mi mostra le classi
interfaccia i nomi dei file delle cartelle
gerarchie pacchetto e così via di nuovo questo
è potenzialmente il code code morale il
modello per quello il divario codice modello
si manifesta in un numero di
diversi modi
uno di questi è semplicemente questo
e chiedi alle organizzazioni di mostrarmi il tuo
diagrammi di architettura e poi hanno
questi meravigliosi sembrano molto colorati
diagrammi di architettura a volte e poi
chiedono al team di sviluppo di farlo
ha un senso e non lo sanno perché
non corrispondono al nostro codice allora questo
succede molto e questa è la cosa che io
voglio provare e correggere qui pure in
libro george fairbanks dice uno dei
modi in cui possiamo affrontare questo gap di codice del modello
è quello di adottare un architettonico e evidente
stile di codifica ora sembra molto grandioso
ma fondamentalmente sta solo dicendo che il
la struttura del codice dovrebbe riflettere il
intento architettonico quindi c’è un bello
mappatura pulita tra il modo in cui pensiamo
il nostro sistema da una sorta di top-down
prospettiva e cosa il codice finisce
sembra come se fosse strutturato così
questo mi porta a come ristrutturare
codice e ovviamente ce ne sono tantissimi
modi diversi per farlo, quindi vado
camminare attraverso un mucchio di più
modi comuni per organizzare in questo caso
Codice Java ma molto simile a quello che sono
andando a parlare di si applica a molti
altre lingue e anche il primo di
questi sono chiamati confezionati per strato e
quello che stiamo cercando di fare qui è che siamo
cercando di organizzare la base di codice da formare
cosa fa da un tecnico
prospettiva quindi si spera se l’hai visto
questo un milione di volte prima che questo sia un
tipicamente uno stile orizzontale di affettatura
di imballaggio di stratificazione e si finisce
con basi di codice che sembrano così
immagina che stiamo costruendo una rete
applicazione facendo qualcosa con gli ordini
potresti avere una sorta di livello web
qui e ordina al controllore di fare webby
roba potreste avere degli affari
cosa di servizio qui come un servizio di ordine
e potrebbero avere alcuni dati in
in fondo tutti hanno familiarità con questo
bene hai diversi tipi di strati
architetture hai rilassato
contro gli approcci rigorosi alla stratificazione del
la differenza è essenzialmente quanti
indica quanti livelli puoi chiamare
chiami solo quello direttamente solo il
strati direttamente sotto di te o puoi
saltare attorno ai livelli questo è il
differenza tra dritto e rilassato
perché lo facciamo perché lo abbiamo fatto?
e la risposta è a tutti che ci dice di
quindi vai e leggi un libro sulla primavera di
questo caso e dice yeah organizza il tuo
codice come questo ed è un mucchio di
i livelli su cui giri la pagina dice
tu perché le preoccupazioni di separazione
testabilità ecc. ecc. campione aggiuntivo
basi di codice ogni volta che scarichi a
codice di esempio di base per qualche nuovo framework
in genere sono strutturati in maniera carina
modo semplice per capire in genere a strati
rock modella qualsiasi demo che vedi
le conferenze sono in genere stratificate
architetture e così via e così via
avanti c’è qualcosa chiamato cargo
programmazione di culto che potresti essere venuta
in tutto prima stupefacente questo sta facendo
roba perché pensi che dovresti essere
non proprio perché?
e penso che architetture stratificate e
strutturare il nostro codice come un insieme di livelli
rientra in questa categoria un numero di
volte e spesso non pensiamo molto
attentamente sul motivo per cui stiamo facendo è noi
solo tipo di farlo perché pensiamo
dovrebbe perché è così che tutti gli altri
fa questo zio Bob Martin un certo numero di
anni fa ho scritto questo bellissimo post sul blog
chiamato architettura urlante e lui
sostanzialmente detto se guardi di più
basi di codice impresa sembrano tutti
roba di dati di roba di affari stessa roba del web
e questo si riflette in genere nel
struttura di livello superiore delle cartelle e
pacchetti e namespace e il co
elementi e dice che questo non è il modo
che il mondo dell’edilizia funziona così se tu
guarda il set di progetti per a
biblioteca o casa o museo puoi
dillo che è una biblioteca o una casa o in
riprendere solo guardando i progetti
e così questo ci porta a qualcosa
altro
Martin Fowler ha detto una cosa simile
bene ha detto questa architettura a strati
questa strutturazione del codice a strati è un bene
il modo di iniziare è bello e facile è
facile da spiegare alle persone comunque una volta
puoi scalare il tuo prodotto in scala
il tuo progetto ora devi iniziare
pensando alla modularità all’interno di
strati così piuttosto che tagliare il taglio
fuori così forse hai bisogno di tagliarlo
in altro modo l’altra cosa
tenere a mente qui è se si ha a
architettura stratificata come te
costruire un’applicazione web e tu vuoi
per aggiungere un campo alla nostra pagina web , finisci
cambiando roba nella pagina web e poi
un controller web e poi la base
nel livello aziendale o di servizio e
anche nel livello dati tante modifiche
che facciamo ai nostri sistemi software
effettivamente attraversare tutti i livelli comunque
un’architettura a strati non è un
modo particolarmente buono o efficace per
codice di struttura pure da quelli
prospettive approcci alternativi
numero due per caratteristica, quindi questo è
fondamentalmente ribaltando tutto
gradi e piuttosto che organizzare i nostri
codice e raggruppare il nostro codice per tecnica
cosa stiamo facendo ora funzionando
funzione caratteristica imposta percorsi aggregati lì
sono diversi modi in cui possiamo affrancarci
codebase in verticale se lo si desidera
Dì che come lo fai è, naturalmente
interamente a voi ma è quello
affettatura verticale quindi stiamo raggruppando
insieme cose legate ad un certo
set di funzionalità o potrei andare per il percorso
esempio questo è come potrebbe sembrare
quindi piuttosto che avere i nostri ordini
funzionalità suddivisa in pacchetti web
pacchetti di pacchetti di pacchetti aziendali che gettiamo
tutto insieme in un unico ordine
il pacchetto è meglio di quanto confezionato da
strato discutibile è solo diverso
uno dei vantaggi citati include è
essere è facile
per trovare il codice relativo agli ordini, credo di sì
perché c’è un muro in un posto
comunque con idee moderne puoi usare
cercando così tanti di questi argomenti
non è bello essere onesti, ottieni
maggiore coesione perché tutti i tuoi
roba di ordine è in un posto ora uno di
i grandi problemi con questo modo di
il codice della struttura è quello che hai
ordini e clienti e hai bisogno di
avere un collegamento tra i due dove sei
crea quel link quindi ce ne sono alcuni
interessanti effetti collaterali e avvertimenti a
ad esempio, pacchetto per funzionalità, a volte
quando ho scuse ne deriva e dico sai
chi fa pacchetto per strato e nessuno
dice qualcosa e dico chi fa il pacco
per caratteristica in poche altre mani salgono e
poi hai chiesto chi fa gli adattatori delle porte
e molte altre mani salgono e questo sembra
essere un approccio molto più comune di
strutturazione di applicazioni monolitiche
questi giorni forniscono porti e attori
essenzialmente quello che stai cercando di fare
qui stai cercando di mantenere il tuo
codice commerciale relativo al dominio separato
dalla tua tecnica o infrastruttura
codice correlato e il modo in cui funziona
che c’è un dentro e un fuori
e ci sono un certo numero di differenti
approcci e temi sostanzialmente su questo
nucleo centrale idea alcuni di loro che puoi
ho sentito parlare di esagonale
architetture architetture pulite e in
architetture e alcune così così
hai un esterno che riguarda il tuo
la tecnologia e le tue interfacce con il
mondo esterno e tu hai un interno
che riguarda il tuo dominio aziendale
l’interno è tecnologia agnostica quelli
di voi familiari con il principale diverso
design in genere esprimi il
concetti al suo interno in termini di ciò
ddd linguaggio onnipresente in modo cliente
ordina prodotti ecc. e l’esterno è
le cose specifiche del testo così quando sei
scrivendo interfacce e adattatori a
database e parti esterne e API
è lì che vive quel codice e
c’è una regola qui essenzialmente la
fuori dipende dall’interno mai il
viceversa in modo che appaia come questo
hai due cose di dominio nel mezzo
la tua roba infrastrutture sulla parte esterna
e
tutta la difesa le frecce puntano verso l’interno
e questo è quello che potrebbe sembrare da
una specie di prospettiva di diagramma di classe in
Giava
solo questo pacchetto qui rappresenta il
roba di dominio all’interno e il
le frecce puntano di nuovo verso l’interno, sospetto
questo approccio alla strutturazione del codice
è anche molto carico e uno dei
ragioni per cui dico questo è perché non tutti
i quadri sono creati uguali e ciò che io
significa che è più facile concludere
alcuni quadri e alcune interazioni
con il mondo esterno di altri così
immagina di costruire una rete
applicazione e la tua applicazione web ha
100 pagine diverse che visualizzi
l’utente che devi fondamentalmente creare
100 adattatori e wrapper uno per pagina
in sostanza se tutte le tue 100 pagine terminano
parlare a tre o quattro tavoli in a
database è più facile racchiudere tre o
quindi forniscono quattro tabelle su un database
wrapper e adattatori in 100 pagine web
quindi devi stare attento a prendere
porte e adattatori di valore nominale perché
potresti finire per scrivere un sacco di adattatori
codice e codice di astrazione che non lo sono
davvero necessarie persone che ho visto per
esempio avvolgere quadri come la primavera
MVC così primavera MVC tipo di siede in questo
fuori e poi aggiungono ulteriori
astrazioni in cima alla primavera MVC a
assicurati che il loro codice di dominio non lo sia
dipende dalla primavera MVC e se lo sei
pensando che sia matto è perché
primavera MVC fornisce già un bel
astrazione semplice su HTTP così sei
tipo di avvolgere la confezione
avvolgendo così solo fondamentalmente con attenzione
questo è quello che sto dicendo di aver detto tutto
di questo diritto, torniamo al nostro
semplice lattice ho portato esempio così abbiamo
questo codice abbiamo affari roba web
roba di dati di roba e hai una bella grande
sistema migliaia di righe di codici tutti
funziona alla grande
qualcuno nuovo si unisce alla tua squadra e tu dici
ah ciao ho una grande funzionalità
bella caratteristica introduttiva non è troppo
difficile mi piacerebbe di aggiungere al
codebase la nuova persona entra in loro
scarica una copia del codice sorgente loro
dai un’occhiata al codice sorgente loro
prova a capire cosa sta succedendo e
dicono di sì, penso di sapere come aggiungere
questa caratteristica e prendono questo e loro
fallo sì, questo potrebbe essere il modo migliore
implementare quella caratteristica o potrebbe
no e forse hai avuto un preside
la tua squadra dice che assicurati di avere un
approccio a più livelli e non tagliamo
inizia passando strati ma se tu
non l’ho detto a te nuovo nuovo falegname
potrebbero farlo perché pensano
è più efficiente e se lasciato
deselezionato si ottiene che accada uno dei
problemi con linguaggi come Java
quello che le persone in genere fanno è te
so che questo potrebbe essere un pacchetto Java e
questo potrebbe essere un pacchetto Java separato in
ordina che questa cosa parli con questo
cosa in un pacchetto separato questa cosa
deve essere pubblico una volta che questa cosa è
pubblico può essere chiamato da qui ma
inoltre può anche essere chiamato da qualsiasi luogo
altrimenti nella tua base di codice vedi lo stesso
con c-sharp e la chiave interna funzionano
per esempio, così ancora una volta devi essere un
un po ‘ attento qui e questo è quello che noi
tipicamente arriva alla grande palla di fango
è un sistema strutturato a caso e
Amo questo po ‘dettato più da
convenienza quindi sapevamo in fretta di aggiungere
roba al tuo codice base sì, noi faremo il
cose che il modo più veloce possibile
e forse non va bene per tanto tempo
struttura a termine del tuo codebase
longevità del tuo codebase quindi è a
questo punto qualcuno dice che avremo un problema
in secondo luogo non lo facciamo veramente nel
mondo reale perché quello che abbiamo sul nostro
la squadra è un insieme di architetture
principi e questi architettonici
ci permettono di introdurre vincoli e
linee guida e limiti e attraverso
questi principi architettonici persone
non renderò quelle scorciatoie e queste
i principi architettonici in genere dicono
roba del genere quindi controller web
non dovrebbe mai parlare con l’accesso ai dati
repository direttamente questo sarà quasi
passare attraverso questi livelli di servizi, forse
visto questi principi di ordinamento in uso sì
e poi chiedi alla gente come stai
imporre questo e le loro facce diventano vuote
e se ne vanno oh so come rispondere a questo
domanda ci fidiamo dei nostri sviluppatori perché
siamo agili sì e come funziona?
fuori per te e in alcuni casi questo funziona
benissimo non fraintendermi
ci sono sicuramente squadre che ho lavorato
con chi può fare questo e loro sono
fantastico per il resto di noi sì
siamo tutti umani e se abbiamo bisogno di muoverci
veloce
potremmo iniziare a prendere alcune scorciatoie e
se fossimo sul treno della mischia e noi
provato a sprint sprint sprint consegnati
consegna consegnare potremmo prendere di più
scorciatoie e abbiamo app dovrebbe davvero
facciamo e poi arriviamo qualche settimana e noi
andare abbiamo bisogno di una molla refactoring perché
la nostra base di codice è un po ‘un disastro ora
scusa quindi questa è la roba che devi fare
attenzione
è comunque il 2018 e dato che è il 2018
e abbiamo tutto questo apprendimento automatico
e roba di IA che dovremmo essere in grado di costruire
alcuni strumenti che ci aiutano a costruire
basi di codice ben strutturate in altri
parole dovremmo essere in grado di usare gli strumenti
che ci aiutano a creare ben strutturato
basi di codice si ripete questo è come
uno personalmente questo non è un comune
cosa c’è un libro che è stato rilasciato
recentemente chiamato costruzione evolutiva
architetture e in quel libro parlano
sulle funzioni di fitness e fitness
funzioni sono abbastanza ampio in natura
e puoi usarli per
nella scalabilità degli attributi di qualità
sicurezza delle prestazioni quel genere di cose
puoi anche fare parte del tuo processo di costruzione
utilizzare le funzioni di fitness come un modo per affermare
qualcosa sull’idoneità del tuo codice
base di accoppiamento della complessità ciclomatica
e così via e così via e uno dei
i modi per farlo naturalmente sono da usare
utensili e ci sono un certo numero di strumenti
là fuori che può aiutarti a crearne
funzioni di fitness che gestiscono un chirurgo
su quanto è buono o cattivo il tuo codice oggettivamente
è uno strumento di analisi statica e tu hai a
mazzo di controllo violazione di architettura
strumenti quindi sto pensando a cose come
Assistente di JQ
possono scrivere regole con archi Java arc
unità e così via e così via e ciò che voi
può fare con questi strumenti è possibile iniziare
per definire regole che assomigliano un po ‘
questo quindi è la stessa cosa del
principi architettonici conosci i tipi
in Star Sawash web il nostro pacchetto web
non dovrebbe avere accesso a stelle stellari
Tagliare dati personali nel nostro accesso ai dati
pacchetto e tu integri queste cose
con il tuo processo di costruzione e, si spera
qualcuno fa qualcosa di stupido che metti
si interrompe e quindi si disattiva questa regola
perché è fastidioso ma questo è un
storia diversa
sì, lo facciamo tutti bene aggiungendo il tuo
test faccio un po ‘come questa idea
perché questo ci fa diventare un po ‘meglio
rispetto a dove siamo oggi però ci si sente
come un orribile hack quindi dobbiamo scrivere
un sacco di strumenti esterni per verificare
la vera attrezzatura che stiamo costruendo è di
una qualità decente e che proprio no
davvero mi sta bene perché possiamo
spegnilo, quindi qual è la risposta e il
risposta è forse abbiamo bisogno di ottenere una migliore
usando gli strumenti che abbiamo a nostra disposizione
oggi come il compilatore ed è a questo
la gente punta alla fine direbbe bene
aspetta un attimo, se si sta parlando
conosci Java e usa il compilatore e
modificatori di accesso
Java è difettoso
dicono perché Java è difettoso e loro
darti tutti i motivi per cui Java è
per il mio tipo di modificatore di accesso
prospettiva sai che non abbiamo così se
tu se hai un pacco non c’è
tipo di cosa sub package in Java e
lei molto rapidamente puoi esplorare il
diversi difetti della confezione Java
sistema e modificatori di accesso e cose
come questo e questo è giusto in una certa misura
tuttavia questo è ciò che abbiamo e a meno che
vuoi andare e scrivere nuove lingue
che hanno parole chiave di prima classe come
strato e servizio e componenti quindi
forse dovremmo solo cercare di capire
come si usa ora con questo in
mente ho un’altra opzione per te e
questa opzione è ciò che io chiamo pacchetto
componente ed è davvero una sorta di
approccio ibrido al pacchetto per strato e
pacchetto per funzionalità e cosa sono veramente
cercando di fare qui è che sto cercando di
raggruppare tutto il codice che
appartiene al nostro componente nello stesso
posiziona cosa intendo per componenti perché
questo è un orribilmente enormemente sovraccarico
termine ciò che intendo per componente è
essenzialmente questo è un raggruppamento di
funzionalità correlata si spera dietro a
bella interfaccia semplice pulita e questo
componente corre all’interno di qualcosa come un
applicazione se ti stai chiedendo dove
questo proviene da esso viene dal
astrazioni dietro il mio diagramma c4
complessiva così un sistema software è costituito
di contenitori non docker circa
applicazioni e autorità di origine dati
i contenitori contengono componenti componenti
sono costruiti da elementi di codice, quindi cosa sono
cercare di fare essenzialmente è ottenere il
vista dell’architettura del mondo da sposare
con la struttura del codice e il codice
vista del mondo e pacchetto di
il componente è praticamente così
la mia preferenza personale qua e là
sono diversi modi per fare questo, ma il mio
la preferenza personale è sempre da mantenere
il tipo di cose relative alla UI, sia
questo è l’ interfaccia utente web o ap è separato
dalle cose non visive quindi se lo sono
costruendo degli ordini dalla Contea che c’è
un controller di ordini che esegue ordini web
roba e c’è un sacco di
funzionalità relativa agli ordini non visivi
così il business service fa la logica del business
e l’accesso ai dati in modo da tutta questa cosa che sto
andando a chiamare un componente dell’ordine cosa
Sto cercando di fare qui è essenzialmente
applicare il pensiero basato sui componenti a
codice base monolitico , quindi questo è buono
pensiero basato su componenti vecchio stile
disegno basato su componenti applicato a
basi di codice monolitico e quello che sono
provare a fare qui essenzialmente è applicare
modularità come principio guida per a
molto dell’architettura e quindi
Decisioni strutturate di codice Finisco
facendo così sto pensando sempre a cosa sono
le grandi cose a grana grossa che io
vorrei che il mio sistema fosse realizzato
quali sono ad alto livello strutturale
blocchi elementari essenzialmente di maimana
applicazione monolitico l’altro modo di
guarda questo è fondamentalmente mi sto separando
interfaccia dall’implementazione questo è
un altro buon design vecchio stile
la tecnica interessante è esattamente questa
quello che vediamo con i micro-servizi non è vero?
così con pacchetto per componente sto andando
avere una sorta di interfaccia di qualche tipo
dell’interfaccia pubblica di Java e un intero
mazzo di pacchi protetto
codice di implementazione con il
microservizio che avrò di nuovo
una sorta di interfaccia pubblica Jason finita
Messaggi HTTP qualunque sia una sorta di
API pubblica in rete e un intero gruppo
di codice di implementazione privata te
non posso vedere all’interno di così se ho un
ordina un micro servizio che non puoi chiamare il mio
strato di dati all’interno degli ordini Micra così
è nascosto dietro l’ API pubblica il
stessa cosa vale per quello che sto cercando di
fare con pacchetto per componente quindi potrei
avere un sacco di classi e interfacce
vista dentro le mie componenti java ma tu
non posso accedere a questo perché lo sono
intenzione di utilizzare la protezione del pacchetto Javas
meccanismo e nascondilo dall’esterno
mondo quindi questo è un componente per java
pacchetto
si tratta di mettere alcuni limiti
Rize impermeabile attorno al mio codice, quindi questo
è tutto molto facile da fare bene ma il
diavolo è nei dettagli di implementazione
in modo da poter venire tutto il percorso attraverso questo
storia e avere un sacco di cose davvero belle
idee su come vuoi strutturare
la tua base di codice e poi tutto cade
giù che ultimo ostacolo e si finisce
con la grande palla di fango e tu no
so davvero com’è successo e il
la ragione spesso accade è a causa nostra
amici la parola chiave pubblica il numero
di volte persino persino letteralmente in ritardo
settimana ho passato un po ‘del mio codice
e stavo leggendo ero come questa cosa
non ha bisogno di essere pubblico cancellare noi
digita public di default e io no
sapere perché è la memoria muscolare un sacco di
strumenti che usiamo conosci gli ID che vai
attraverso i maghi e ti creano a
un sacco di lezioni pubbliche come smettere di fare
basta smettere di usare la chiave pubblica quando
non è necessario metà del tempo che cosa è
il problema è la parola chiave pubblica
una grande differenza tra l’organizzazione del codice
e codice incapsulante e il problema
stiamo usando la parola chiave pubblica è
ti stai davvero perdendo molti dei
benefici relativi al pozzo di incapsulamento
questi due concetti sono molto molto
diverso ti ho dato quattro esempi
di alcune funzionalità relative agli ordini
numero uno pacchetto per livello numero due
pacchetto per funzionalità numero tre porte
e numero di adattatori per il mio pacchetto di a
approccio componente se prendiamo questi quattro
semplici esempi e assumiamo che tutto
di quelle interfacce e classi sono fatte
pubblico quindi di nuovo questo è uno slot java
ma puoi applicarlo ad altri
lingue se noi se facciamo il
assunzione di tutti questi tipi nel
gli esempi sono pubblici se ne ottengono quattro
versioni della stessa cosa che sono molto
concettualmente diversi quindi sono
concettualmente diverso architettonico
stili e strutture ma sono
in realtà sintattico
identico quindi ecco i quattro esempi
steso fianco a fianco impacchi doppio strato
seleziona le mie future porte e adattatori
pacchetto per componente se lo facciamo
assunzione a tutti questi tipi in
questi pacchetti di pubblico tutto ciò che siamo
l’utilizzo di questi pacchetti è per l’organizzazione
le loro cartelle simili non abbiamo
incapsulamento che sta succedendo qui
quindi se rimuoviamo questi pacchetti da
questi diagrammi di classe lo ottieni
sono tutti uguali
è un trucco buono, non è questo va a
lungo modo per spiegare come a volte
quando guardo dico porte e adattatori
base di codice sembra un layered
architettura e spesso è perché lascia
tutte le frecce combaciano, sei solo
scaricare classi pubbliche in diversi
pacchetti ma non c’è incapsulamento
quindi devi essere molto attento
con l’uso della parola chiave pubblica noi
hanno modificatori di accesso anche se in Java e
altre lingue quindi se usiamo l’accesso
modificatori in modo appropriato possiamo iniziare a
disegnare alcune immagini molto diverse quindi sono
andando a riportare i pacchetti su
questo diagramma e sto per svanire
Ho intenzione di oscurare il
tipi di implementazione che potrebbero
potenzialmente essere reso pacchetto Java
protetto e quindi nascosto all’esterno
quel pacchetto è sorta di deve lavorare
questo attraverso nella tua testa così nel
esempio di architettura a strati questo ordini
il controllore ha bisogno di accedere a questo ordine
servizio quindi è necessaria questa interfaccia di servizio
essere pubblico la classe di implementazione
può essere protetto in modo sicuro se
ti stai chiedendo come fai a creare un’istanza
un pacchetto protetto classe chiedi a Spring
lo farai per te in tutto questo
classe di implementazione del servizio per utilizzare questo
ordini repository l’interfaccia deve
può essere di nuovo il costo di implementazione pubblica
essere protetto da un pacchetto
con pacchetto per funzionalità ne hai bisogno
una sorta di punto di ingresso pubblico in questo
pacchetto e tutto il resto può essere
nascosto dal mondo esterno assumendo
nessun’altra fetta ha bisogno di accedere a cose dentro
questo pacchetto di ordini con le porte e
adatta di nuovo l’architettura a quella cosa
deve essere reso pubblico perché è
accessibile dal mondo esterno
questa interfaccia deve essere resa pubblica
la classe di implementazione può essere impacchettata
protetto e questa interfaccia deve essere
pubblico perché è dipende da
da questo pacchetto potenzialmente protetto in
costi di relazione seduti fuori in porto
nel mio pacchetto il mio componente di nuovo quello
la cosa è solo pubblica e noi abbiamo un
interfaccia pubblica qui e un sacco di
pacchetto protetto codice di implementazione così
ora puoi vedere che sono effettivamente stratificati
le architetture e gli adattatori di porte non lo sono
diverso a seconda di come si guarda
a loro considerando che queste altre due versioni
sono abbastanza diversi e questa è la cosa
è sempre la pena di avere un po ‘di più
pensando tempo e facendo in modo che il
modo in cui implementate concretamente
codice corrisponde a come si intende
sei un artificiere da guardare dall’alto verso il basso
prospettiva e una delle cose che
pensi che dovresti fare qui è usare
incapsulamento e davvero uso
incapsulamento per minimizzare il numero di
potenziali dipendenze se hai un
codice base e tutto è pubblico
tutto può essere chiamato da tutto
altro e hai un sacco di potenziale
dipendenze una volta che si inizia a nascondere il codice
e usando le informazioni nascoste in a
capsulazione che puoi avere solo
le dipendenze dalle cose pubbliche meno sono
cose pubbliche ne hai di meno
potenziali dipendenze che puoi avere e
l’ altro modo di vederlo è questo il
superficie di qualsiasi API pubblica interna
dovrebbe corrispondere al tuo intento architettonico
quindi se hai un diagramma attivo che come
un insieme di componenti o moduli e
i livelli assicurano che il tuo codice lo rispecchi
allora quella gente non può bypassare ciò che tu
considerato come un modulo o componente
e inizia ad accedere direttamente a internals
quindi, basandomi su quello che sto dicendo qui, se tu
stai costruendo una tua applicazione etica
avere alcune opzioni qui per usare il
compilatore
per far rispettare alcuni dei tuoi elementi architettonici
confini e le tue idee architettoniche
nella tenda questo è come il semplice
la versione di tutta la storia, perché una volta
prendi queste idee puoi andare
puoi fare un numero di passi ulteriore e
ci sono altri modi per fare coppia
gli elementi del codice, ad esempio, puoi usare a
struttura del modulo come il nuovo / vecchio
Framework di moduli Java 9 che le persone sono
non lo si utilizza il framework modulo Java
ti consente di distinguere i tipi pubblici
dai tipi pubblicati in modo da poter scrivere
la tua intera base di codice come un mucchio di
tipi pubblici e quando crei il tuo
modulo manifest solo esportazione e
pubblicare sottoinsiemi specifici di questi tipi
se qualcuno cerca di usare il tuo pubblico
tipi che non sono pubblicati non possono
fallo così ci sono i framework dei moduli
là fuori che ti permettono di creare nuovamente
questa distinzione questa coppia 2d
interfaccia dall’implementazione che potresti
anche andare oltre e dividere la tua fonte
albero in più parti in modo multiplo
moduli maven great great Draven
ovviamente graving un grado su moduli e
così via e così via, così ne hai uno
albero del codice sorgente per oggetto per modulo
per strato qualunque cosa tu debba fare
attenzione a questo se si sta facendo le porte
e gli adattatori che conosci avere separato
gli alberi fonte sono un suggerimento raccomandato
approccio perché uno degli anti- brevetti
Vedo con lo stile di porte e adattatori
architetture è che hai due basi di codice
uno per il materiale nel mezzo e uno
per tutto il resto intorno
quindi hai come un albero dei sorgenti di dominio
e un albero di sorgenti dell’infrastruttura e
il problema con questo è se tu
avere un albero sorgente con tutto il tuo
codice di infrastruttura è molto facile per
codice di infrastruttura per parlare con ciascuno
altro ancora se tagli le tue porte
e il codice degli adattatori direttamente in più
codice alberi puoi fermare questa cosa
per esempio al momento della compilazione
il problema di fare questo è molto
di trade-off perché più fonte
alberi hai più lento e più
complicato il processo di compilazione diventa così
probabilmente c’è un po ‘di dolcezza
dipende da cosa sei tu
costruendo nel dimensionamento di vediamo di
la cosa che stai costruendo più in generale
ovviamente ogni modalità di disaccoppiamento ha
diversi trade-off e questo è dove
in realtà torniamo a Microsoft in
perché i micro-servizi sono se ti piace
la modalità definitiva di disaccoppiamento non lo è
piuttosto che avere un po ‘di codice in codice
di sedersi nello stesso processo con alcuni
i confini intorno a te sono separati
processi con essenzialmente reti in
il modo in cui questo è il massimo
modalità di disaccoppiamento ma ci sono un sacco di
trade-off associati a farlo
e questo solleva una domanda piuttosto complicata
come fai a sapere quale stile di
l’architettura ti si addice
vai dal monolite o vai?
dal mio corredo contro e
sfortunatamente vedo molte persone
saltando su micros
per motivi di moda e hype e
stanno fallendo questo è ciò che George
Fairbanks di nuovo nel suo libro chiamato
architettura in diversi disegni così
scegliendo un’architettura che sceglie il
suolo solo perché perché no e non proprio
pensando attraverso i trade-off e il
avvertimenti su quel particolare
scelta architettonica una delle cose che ho
raccomandare alle persone di usare l’agilità come a
attributo di qualità quindi attributi di qualità
sono cose come le prestazioni del ridimensionamento
e disponibilità e così via
agilità quindi quanto velocemente devi muoverti
una squadra e quali parti della tua base di codice
quali parti del tuo sistema devono spostarsi
veloce quali parti della tua base di codice sono
potenzialmente più volatile di altri
e forse usi questa informazione come
modo per rendere molto più informato
decisione quindi forse hai il grosso di
il tuo codice in un monolite e un mucchio di
piccoli servizi in tutto il bordo che
bisogno di quella volatilità o che deve essere
in grado di cambiare con quella volatilità
piuttosto e in tutto questo un bene
l’architettura ti dà una divinità e di nuovo
questo tipo di senso ha non se
hai mai visto quei grandi codici orribili
basa le grandi palle di fango agli spaghetti
sistemi di codice quando si modifica qualcosa
qui un sacco di roba qui si rompe
e tu non sai perché e ti rallenta
una buona architettura ti dà un
Jill T quello che intendo per un bene
l’architettura è alquanto soggettiva
ma quello che intendo per un buon architetto è
qualcosa con
Sono modulare , è qualcosa che ha un
buona struttura ben definita e uno il
la promessa qui è che non si ottiene per quello
gratis quindi devi metterne in anticipo
pensando di chiamarlo design in anticipo per
vieni in una bella struttura ben definita
e questo è uno dei motivi per cui
la gente salta sui versi di mike rizzo perché
microservizi ti offre una strategia per
decomposizione e modularità è a
una serie di processi separati in esecuzione
in giro sulla tua rete in modo che le persone lo usino
architetture di micro servizi da applicare
confini del codice e in molti dei
conferenza parla certamente nel passato
pochi anni trovi sempre persone
confrontando questa cosa con queste cose
quaggiù questi orribili monolitici grandi
palle di fango e questo è davvero ingiusto
significa storicamente monolitico
le applicazioni sono sembrate così
ti darei sicuramente questo, ma questo
è un paragone davvero ingiusto perché
quello che vedo un sacco di gente è loro
Diciamo che abbiamo uno di questi e lo siamo stati
costruendo uno di questi per 10 o 15 anni
ed è un casino e non possiamo cambiare
è troppo lento per aggiungere funzionalità ora
quindi quello che faremo è riscriverlo
da zero in quello stile posso vedere
la gente sta andando davvero sì ho avuto un
numero di organizzazioni con cui ho parlato
quest’anno che fondamentalmente mi ha detto queste
questa storia esatta e quello che poi 14 finiscono
facendo è che finiscono per prendere il loro
approccio alla costruzione di quello e si attaccano
tipicamente chiamate HTTP sincrone tra
le cose nel monolite e finiscono
con quello e inoltre tutto questo
deve essere dispiegato, ma hey noi
fare micro servizi su porta kubernetes CV
design guidato in modo da sapere praticamente loro
finire con una versione distribuita bene
lì prima che è davvero male
esibirsi e così via e così via ora
questo è un confronto molto più equo che vorrei
come le persone a magari solo farlo prima
così come ti ho descritto durante questo
parlare è possibile creare modulare
monoliti devi pensare un po ‘
in questo devi fare
a cui si riflette la struttura del codice
idee architettoniche nel decimo e
di nuovo usi l’agilità come qualità
attributo
forse hanno la maggior parte delle tue funzionalità in questo
cosa e hai un sacco di servizi
fluttuando intorno al bordo dove questo
ha senso c’è un po ‘ più difficile
parte di tutto ciò andrò a saltare
finito e questo è in realtà fare design
e la gente dice bene come si progetta
software Sono come abbiamo fatto prima
vai a guardare Wikipedia e tu li mostri
la pagina sulla decomposizione come oh
è interessante
si e tu dici loro che ci sono
diversi modi per scomporre una cosa in
cose più piccole non lo sapevo neanche io
e sembra che abbiamo perso il
capacità di descrivere come effettivamente facciamo
progettare perché le persone semplicemente progettano ma
non possono dirti il sottostante
principi su come ti progettano
lo so, ma è una decomposizione funzionale
o decomposizione basata sulla volatilità e così via
e così via e poi ogni volta che vai
ai microservizi si parla in questi giorni di persone
finiscono per parlare dei partner e loro
finiscono per mostrare uno screenshot di questo
carta e loro cancellano la parola
modulo e sì servizio di consegna o
micro servizio in là e c’è a
un sacco di cose che abbiamo imparato
in passato questo è davvero dagli anni ’70
documenti interessanti che hai sicuramente letto
e c’è un sacco di
roba interessante in passato su bene
design e alta coesione e basso
accoppiamento e responsabilità e
volatilità e l’abbiamo appena dimenticato
tutto e tutti questi argomenti si applicano a
ogni sorta di un sistema software noi
dovrebbe mai costruire un bene
l’architettura ti dà una buona agilità
la struttura ti dà agilità e poi
la gente ti chiede bene come possiamo arrivare
a un insieme di cose e tu dici di nuovo
non c’è più tecniche vanno là fuori
imparali dice qualcosa chiamato CRC
è un vecchio laboratorio ad alta tecnologia usato per
essere abbastanza bene usato per il tipo di
Rupp epoca processo unificato Rush è caduto fuori
moda ha classe nelle classi di nome
responsabilità collaboratori è a
lavoro di shopping tecnica per fare lezione
il design della torre non lo facciamo a livello di classe
progetta più in riunioni ma tu
prendere questo approccio e si strofina fuori
questa prima parola e la fai
componente
o modulo o micro servizio e ottieni
lo stesso approccio si ottiene lo stesso
approccio di progettazione collaborativa applicato a
un alto livello di astrazione in modo da ottenere
bravo nel design, si ottiene un buon design
prima devi buttare roba in un monolito
una volta che sei soddisfatto del tuo design e
il tuo approccio alla decomposizione nel
monolite quindi fai uscire qualcosa
il mondo dei micro servizi se ne hai bisogno
scrivi così che l’ architetto dei servizi di Mike lo faccia
fornire un sacco di vantaggi agilità
resilienza della scalabilità e così via e così via
su così via, ma è molto più difficile da gestire
con più parti mobili automatiche
aggregazione dei log di monitoraggio di provisioning
paghi anche di più così uno dei
ragioni per cui ho sollevato la struttura di Iser
giusto l’inizio perché è un avvio
come una singola persona di avvio voglio
consegnare cose veloci non voglio essere
trascorrere mesi a fare scherzi
aggregazione di log di docker kubernetes
quadri e tutte queste cose io solo
voglio buttare cose sul web e ottenere
persone che utilizzano in modo struttura è troppo
monoliti modulari che non devo affrontare
con tutta questa roba ancora, ma ho potuto
fai se volevo, quindi scegli Mike
servizi se ti danno benefici no
perché il tuo codebase è un disastro ora
perché non risolverà nessuno
problemi, naturalmente, ciò che si avvicinano
fare se si tratta di un monitor
monolite o cos’è quello su micro
servizi non dimenticare il
i dettagli di implementazione sono così definitivamente
consapevole di questo uso eccessivo della chiave pubblica
parola per esempio quando stai costruendo
applicazioni monolitiche e sicuramente
essere consapevoli del codice del modello, quindi se si
mai voglia di commercializzarlo a diagrammi e
assicurati che corrispondano al tuo codice e quello
è fondamentalmente che grazie mille
[Applausi]
scendi da me
possiamo sentirmi ok si così benvenuto
questo discorso non è figo o pubblicizzato o
alla moda , si tratta di modulare
monoliti di cui uno sfondo dice discorsi
giusto così sono su Twitter e un numero di
anni fa ho detto questo lo sai se tu
non è possibile costruire un monolite decente no
fastidio nei microservizi perché ho visto a
molte persone saltano sui microfoni all’estero
e loro erano destinati a fallire e io
pensavo che fosse molto saggezza e così
ha fatto 305 altre persone
esattamente però tieni il tuo applauso che ho ricevuto
completamente surclassato dall’architetto
cliffie Vedo che hai una struttura poli
monolite vorresti che io lo convertissi
in una serie di poli set di
microservices 4.000 quindi posso grandezza
più l’altro modo di guardare questo è
quello e quello è essenzialmente che cosa questo
parla tutto per quelli che non lo fanno
conoscimi mi chiamo Simon Brown, sono un
consulente indipendente specializzato in
architettura software sono l’autore di
un paio di libri di architettura del software
che puoi trovare su lean pub comm I
ha anche scritto un capitolo su Zio Bob
Il libro di architettura pulito di Martin
recentemente il capitolo è chiamato il
capitolo mancante è lì perché lo faccio
avere una copia e tutto il materiale in
mancano essenzialmente i capitoli di questo
il discorso riguarda oltre a tutti
di questa roba sono il creatore del c4
modello che spiegherò tra un secondo ma
in poche parole è un insieme gerarchico di
diagrammi di architettura per descrivere
sistemi di architettura del software e io sono
il fondatore / codice principale scimmia /
tutto il resto di una società chiamata
struttura Iser che è un insieme di strumenti
creare diagrammi di ottava perché li porto
queste due cose prima di tutto è il
la struttura di Iser è il lato server
fondamentalmente a Java primavera e vediamo il web
applicazioni – monoliti modulari in esecuzione
sulla fondamentale fonderia di cloud per i servizi Web
piattaforma quindi tutte le cose di cui sto parlando
in questo discorso che sto effettivamente usando
io che spesso chiamiamo questo cane Fooding
che è orribile
ma ci andiamo io non sto usando docker o
comunità o microsomi o altro
così così ancora una volta questo è tutto
roba vecchio stile e inoltre se
hai una buona struttura del codice è facile
per visualizzarlo in modo che è il tipo di dove
Sono più interessato a questo modulo
roba monolite da c4 c4 è il mio
tecnica di diagrammi il suo contesto
contenitori componenti in codice e tu
può trovare maggiori informazioni a riguardo a
c4 modello comm per darti un rapido
introduzione quindi questo è un contesto di sistema
diagramma per un sistema che ho costruito una volta su a
tempo fondamentalmente
Ho costruito questa cosa qui come diversa
tipi di utenti e diversi sistemi
connessioni facciamo lo zoom in quel sistema e
mostriamo i contenitori al suo interno
contenitore intendo applicazione o
datastore quindi qui possiamo vederlo
c’è un’applicazione web un’altra java
applicazione e un mucchio di data store
cose che ingrandiamo in questo aggiornamento del contenuto
a questa applicazione java e ci arriviamo
vedere i componenti interni che java
l’applicazione è di nuovo piacevole e facile
è tutto bello e gerarchico
avviso nell’angolo in alto a destra c’è
un componente tweet ora i tweet
componente in questo caso è giusto
responsabile di inserire i tweet in a
Archivio dati Mongo e recupero di tweet
di nuovo quindi questo è il livello 3 della mia C per
diagrammi quindi ingrandiamo questo singolo
box il componente tweet e ci arriviamo
guarda il codice che lo implementa ora cosa
hai notato bene il precedente
diagramma c’era una casella chiamata tweet
componente e ora ti ho mostrato il
codice non c’è una casella chiamata tweet
componente è andato componente tweet fa
in realtà non esiste dove è andato il
componente tweet è in realtà un mucchio di
Interfacce Java in questo caso e Java
classi attraverso un’architettura a strati così
abbiamo avuto questa bella storia semplice
svolgendosi e poi ci siamo arrivati
livello di codice finale la storia si fermò
lavorando ed è a questo punto dove
la gente dice bene questo in realtà no
perché sai che componente tweet
esisto concettualmente sì immagino così ho
significa che è un raggruppamento concettuale di a
un sacco di interfacce e classi Java ma
non è questo il punto qui il punto qui
è quella qualsiasi astrazione che usiamo
descrivere il nostro software dovrebbe riflettere il
codice e viceversa e questo è
essenzialmente di cosa parla questo discorso
c’è un grande libro sul software
architettura farò riferimento a chiamato
solo abbastanza architettura software di
George Fairbanks
in questo libro George parla di ciò che lui
chiama il code code del modello quindi scegli il
scena sei al lavoro stai avendo un
discussione di architettura con il tuo
amici e colleghi e durante questo
discussione che userete
parole come il servizio componente modulo
sottosistema di livello chi è uno sviluppatore Java
sei un buon chunky eccellente così in Java
parliamo spesso di costruire strati
le applicazioni sì, Java ha un livello
parola chiave Oh , Java ha un componente
parola chiave non proprio e questo è il
problema delle lingue che usiamo e
questo vale per la maggior parte delle altre lingue come
bene le lingue che utilizziamo non hanno
questi costrutti architettonici come
cittadini di prima classe come di prima classe
parole chiave allora questo è il codice di modello mancante
quindi abbiamo parlato di un modulo o di un servizio
o un livello e se non è possibile mapparli
concetti nella base del codice c’è a
mancata corrispondenza non c’è una discrepanza tra
questi due modi di pensare dal basso verso l’alto
contro top-down questo è il codice del modello
gap l’altro modo di pensare a questo è
Immagino che ho chiesto di disegnare me un
diagramma dell’architettura del tuo software
probabilmente mi attirerai un po ‘alto
livello componenti moduli immagine
servizi ecc. e come interagiscono con lei
runtime se dovessi trovare alcuni strumenti
per decodificare un diagramma dal tuo
codice reale non ho intenzione di ottenere
lo stesso diagramma sono io
Ho intenzione di ottenere un livello molto basso molto
diagramma preciso che mi mostra le classi
interfaccia i nomi dei file delle cartelle
gerarchie pacchetto e così via di nuovo questo
è potenzialmente il code code morale il
modello per quello il divario codice modello
si manifesta in un numero di
diversi modi
uno di questi è semplicemente questo
e chiedi alle organizzazioni di mostrarmi il tuo
diagrammi di architettura e poi hanno
questi meravigliosi sembrano molto colorati
diagrammi di architettura a volte e poi
chiedono al team di sviluppo di farlo
ha un senso e non lo sanno perché
non corrispondono al nostro codice allora questo
succede molto e questa è la cosa che io
voglio provare e correggere qui pure in
libro george fairbanks dice uno dei
modi in cui possiamo affrontare questo gap di codice del modello
è quello di adottare un architettonico e evidente
stile di codifica ora sembra molto grandioso
ma fondamentalmente sta solo dicendo che il
la struttura del codice dovrebbe riflettere il
intento architettonico quindi c’è un bello
mappatura pulita tra il modo in cui pensiamo
il nostro sistema da una sorta di top-down
prospettiva e cosa il codice finisce
sembra come se fosse strutturato così
questo mi porta a come ristrutturare
codice e ovviamente ce ne sono tantissimi
modi diversi per farlo, quindi vado
camminare attraverso un mucchio di più
modi comuni per organizzare in questo caso
Codice Java ma molto simile a quello che sono
andando a parlare di si applica a molti
altre lingue e anche il primo di
questi sono chiamati confezionati per strato e
quello che stiamo cercando di fare qui è che siamo
cercando di organizzare la base di codice da formare
cosa fa da un tecnico
prospettiva quindi si spera se l’hai visto
questo un milione di volte prima che questo sia un
tipicamente uno stile orizzontale di affettatura
di imballaggio di stratificazione e si finisce
con basi di codice che sembrano così
immagina che stiamo costruendo una rete
applicazione facendo qualcosa con gli ordini
potresti avere una sorta di livello web
qui e ordina al controllore di fare webby
roba potreste avere degli affari
cosa di servizio qui come un servizio di ordine
e potrebbero avere alcuni dati in
in fondo tutti hanno familiarità con questo
bene hai diversi tipi di strati
architetture hai rilassato
contro gli approcci rigorosi alla stratificazione del
la differenza è essenzialmente quanti
indica quanti livelli puoi chiamare
chiami solo quello direttamente solo il
strati direttamente sotto di te o puoi
saltare attorno ai livelli questo è il
differenza tra dritto e rilassato
perché lo facciamo perché lo abbiamo fatto?
e la risposta è a tutti che ci dice di
quindi vai e leggi un libro sulla primavera di
questo caso e dice yeah organizza il tuo
codice come questo ed è un mucchio di
i livelli su cui giri la pagina dice
tu perché le preoccupazioni di separazione
testabilità ecc. ecc. campione aggiuntivo
basi di codice ogni volta che scarichi a
codice di esempio di base per qualche nuovo framework
in genere sono strutturati in maniera carina
modo semplice per capire in genere a strati
rock modella qualsiasi demo che vedi
le conferenze sono in genere stratificate
architetture e così via e così via
avanti c’è qualcosa chiamato cargo
programmazione di culto che potresti essere venuta
in tutto prima stupefacente questo sta facendo
roba perché pensi che dovresti essere
non proprio perché?
e penso che architetture stratificate e
strutturare il nostro codice come un insieme di livelli
rientra in questa categoria un numero di
volte e spesso non pensiamo molto
attentamente sul motivo per cui stiamo facendo è noi
solo tipo di farlo perché pensiamo
dovrebbe perché è così che tutti gli altri
fa questo zio Bob Martin un certo numero di
anni fa ho scritto questo bellissimo post sul blog
chiamato architettura urlante e lui
sostanzialmente detto se guardi di più
basi di codice impresa sembrano tutti
roba di dati di roba di affari stessa roba del web
e questo si riflette in genere nel
struttura di livello superiore delle cartelle e
pacchetti e namespace e il co
elementi e dice che questo non è il modo
che il mondo dell’edilizia funziona così se tu
guarda il set di progetti per a
biblioteca o casa o museo puoi
dillo che è una biblioteca o una casa o in
riprendere solo guardando i progetti
e così questo ci porta a qualcosa
altro
Martin Fowler ha detto una cosa simile
bene ha detto questa architettura a strati
questa strutturazione del codice a strati è un bene
il modo di iniziare è bello e facile è
facile da spiegare alle persone comunque una volta
puoi scalare il tuo prodotto in scala
il tuo progetto ora devi iniziare
pensando alla modularità all’interno di
strati così piuttosto che tagliare il taglio
fuori così forse hai bisogno di tagliarlo
in altro modo l’altra cosa
tenere a mente qui è se si ha a
architettura stratificata come te
costruire un’applicazione web e tu vuoi
per aggiungere un campo alla nostra pagina web , finisci
cambiando roba nella pagina web e poi
un controller web e poi la base
nel livello aziendale o di servizio e
anche nel livello dati tante modifiche
che facciamo ai nostri sistemi software
effettivamente attraversare tutti i livelli comunque
un’architettura a strati non è un
modo particolarmente buono o efficace per
codice di struttura pure da quelli
prospettive approcci alternativi
numero due per caratteristica, quindi questo è
fondamentalmente ribaltando tutto
gradi e piuttosto che organizzare i nostri
codice e raggruppare il nostro codice per tecnica
cosa stiamo facendo ora funzionando
funzione caratteristica imposta percorsi aggregati lì
sono diversi modi in cui possiamo affrancarci
codebase in verticale se lo si desidera
Dì che come lo fai è, naturalmente
interamente a voi ma è quello
affettatura verticale quindi stiamo raggruppando
insieme cose legate ad un certo
set di funzionalità o potrei andare per il percorso
esempio questo è come potrebbe sembrare
quindi piuttosto che avere i nostri ordini
funzionalità suddivisa in pacchetti web
pacchetti di pacchetti di pacchetti aziendali che gettiamo
tutto insieme in un unico ordine
il pacchetto è meglio di quanto confezionato da
strato discutibile è solo diverso
uno dei vantaggi citati include è
essere è facile
per trovare il codice relativo agli ordini, credo di sì
perché c’è un muro in un posto
comunque con idee moderne puoi usare
cercando così tanti di questi argomenti
non è bello essere onesti, ottieni
maggiore coesione perché tutti i tuoi
roba di ordine è in un posto ora uno di
i grandi problemi con questo modo di
il codice della struttura è quello che hai
ordini e clienti e hai bisogno di
avere un collegamento tra i due dove sei
crea quel link quindi ce ne sono alcuni
interessanti effetti collaterali e avvertimenti a
ad esempio, pacchetto per funzionalità, a volte
quando ho scuse ne deriva e dico sai
chi fa pacchetto per strato e nessuno
dice qualcosa e dico chi fa il pacco
per caratteristica in poche altre mani salgono e
poi hai chiesto chi fa gli adattatori delle porte
e molte altre mani salgono e questo sembra
essere un approccio molto più comune di
strutturazione di applicazioni monolitiche
questi giorni forniscono porti e attori
essenzialmente quello che stai cercando di fare
qui stai cercando di mantenere il tuo
codice commerciale relativo al dominio separato
dalla tua tecnica o infrastruttura
codice correlato e il modo in cui funziona
che c’è un dentro e un fuori
e ci sono un certo numero di differenti
approcci e temi sostanzialmente su questo
nucleo centrale idea alcuni di loro che puoi
ho sentito parlare di esagonale
architetture architetture pulite e in
architetture e alcune così così
hai un esterno che riguarda il tuo
la tecnologia e le tue interfacce con il
mondo esterno e tu hai un interno
che riguarda il tuo dominio aziendale
l’interno è tecnologia agnostica quelli
di voi familiari con il principale diverso
design in genere esprimi il
concetti al suo interno in termini di ciò
ddd linguaggio onnipresente in modo cliente
ordina prodotti ecc. e l’esterno è
le cose specifiche del testo così quando sei
scrivendo interfacce e adattatori a
database e parti esterne e API
è lì che vive quel codice e
c’è una regola qui essenzialmente la
fuori dipende dall’interno mai il
viceversa in modo che appaia come questo
hai due cose di dominio nel mezzo
la tua roba infrastrutture sulla parte esterna
e
tutta la difesa le frecce puntano verso l’interno
e questo è quello che potrebbe sembrare da
una specie di prospettiva di diagramma di classe in
Giava
solo questo pacchetto qui rappresenta il
roba di dominio all’interno e il
le frecce puntano di nuovo verso l’interno, sospetto
questo approccio alla strutturazione del codice
è anche molto carico e uno dei
ragioni per cui dico questo è perché non tutti
i quadri sono creati uguali e ciò che io
significa che è più facile concludere
alcuni quadri e alcune interazioni
con il mondo esterno di altri così
immagina di costruire una rete
applicazione e la tua applicazione web ha
100 pagine diverse che visualizzi
l’utente che devi fondamentalmente creare
100 adattatori e wrapper uno per pagina
in sostanza se tutte le tue 100 pagine terminano
parlare a tre o quattro tavoli in a
database è più facile racchiudere tre o
quindi forniscono quattro tabelle su un database
wrapper e adattatori in 100 pagine web
quindi devi stare attento a prendere
porte e adattatori di valore nominale perché
potresti finire per scrivere un sacco di adattatori
codice e codice di astrazione che non lo sono
davvero necessarie persone che ho visto per
esempio avvolgere quadri come la primavera
MVC così primavera MVC tipo di siede in questo
fuori e poi aggiungono ulteriori
astrazioni in cima alla primavera MVC a
assicurati che il loro codice di dominio non lo sia
dipende dalla primavera MVC e se lo sei
pensando che sia matto è perché
primavera MVC fornisce già un bel
astrazione semplice su HTTP così sei
tipo di avvolgere la confezione
avvolgendo così solo fondamentalmente con attenzione
questo è quello che sto dicendo di aver detto tutto
di questo diritto, torniamo al nostro
semplice lattice ho portato esempio così abbiamo
questo codice abbiamo affari roba web
roba di dati di roba e hai una bella grande
sistema migliaia di righe di codici tutti
funziona alla grande
qualcuno nuovo si unisce alla tua squadra e tu dici
ah ciao ho una grande funzionalità
bella caratteristica introduttiva non è troppo
difficile mi piacerebbe di aggiungere al
codebase la nuova persona entra in loro
scarica una copia del codice sorgente loro
dai un’occhiata al codice sorgente loro
prova a capire cosa sta succedendo e
dicono di sì, penso di sapere come aggiungere
questa caratteristica e prendono questo e loro
fallo sì, questo potrebbe essere il modo migliore
implementare quella caratteristica o potrebbe
no e forse hai avuto un preside
la tua squadra dice che assicurati di avere un
approccio a più livelli e non tagliamo
inizia passando strati ma se tu
non l’ho detto a te nuovo nuovo falegname
potrebbero farlo perché pensano
è più efficiente e se lasciato
deselezionato si ottiene che accada uno dei
problemi con linguaggi come Java
quello che le persone in genere fanno è te
so che questo potrebbe essere un pacchetto Java e
questo potrebbe essere un pacchetto Java separato in
ordina che questa cosa parli con questo
cosa in un pacchetto separato questa cosa
deve essere pubblico una volta che questa cosa è
pubblico può essere chiamato da qui ma
inoltre può anche essere chiamato da qualsiasi luogo
altrimenti nella tua base di codice vedi lo stesso
con c-sharp e la chiave interna funzionano
per esempio, così ancora una volta devi essere un
un po ‘ attento qui e questo è quello che noi
tipicamente arriva alla grande palla di fango
è un sistema strutturato a caso e
Amo questo po ‘dettato più da
convenienza quindi sapevamo in fretta di aggiungere
roba al tuo codice base sì, noi faremo il
cose che il modo più veloce possibile
e forse non va bene per tanto tempo
struttura a termine del tuo codebase
longevità del tuo codebase quindi è a
questo punto qualcuno dice che avremo un problema
in secondo luogo non lo facciamo veramente nel
mondo reale perché quello che abbiamo sul nostro
la squadra è un insieme di architetture
principi e questi architettonici
ci permettono di introdurre vincoli e
linee guida e limiti e attraverso
questi principi architettonici persone
non renderò quelle scorciatoie e queste
i principi architettonici in genere dicono
roba del genere quindi controller web
non dovrebbe mai parlare con l’accesso ai dati
repository direttamente questo sarà quasi
passare attraverso questi livelli di servizi, forse
visto questi principi di ordinamento in uso sì
e poi chiedi alla gente come stai
imporre questo e le loro facce diventano vuote
e se ne vanno oh so come rispondere a questo
domanda ci fidiamo dei nostri sviluppatori perché
siamo agili sì e come funziona?
fuori per te e in alcuni casi questo funziona
benissimo non fraintendermi
ci sono sicuramente squadre che ho lavorato
con chi può fare questo e loro sono
fantastico per il resto di noi sì
siamo tutti umani e se abbiamo bisogno di muoverci
veloce
potremmo iniziare a prendere alcune scorciatoie e
se fossimo sul treno della mischia e noi
provato a sprint sprint sprint consegnati
consegna consegnare potremmo prendere di più
scorciatoie e abbiamo app dovrebbe davvero
facciamo e poi arriviamo qualche settimana e noi
andare abbiamo bisogno di una molla refactoring perché
la nostra base di codice è un po ‘un disastro ora
scusa quindi questa è la roba che devi fare
attenzione
è comunque il 2018 e dato che è il 2018
e abbiamo tutto questo apprendimento automatico
e roba di IA che dovremmo essere in grado di costruire
alcuni strumenti che ci aiutano a costruire
basi di codice ben strutturate in altri
parole dovremmo essere in grado di usare gli strumenti
che ci aiutano a creare ben strutturato
basi di codice si ripete questo è come
uno personalmente questo non è un comune
cosa c’è un libro che è stato rilasciato
recentemente chiamato costruzione evolutiva
architetture e in quel libro parlano
sulle funzioni di fitness e fitness
funzioni sono abbastanza ampio in natura
e puoi usarli per
nella scalabilità degli attributi di qualità
sicurezza delle prestazioni quel genere di cose
puoi anche fare parte del tuo processo di costruzione
utilizzare le funzioni di fitness come un modo per affermare
qualcosa sull’idoneità del tuo codice
base di accoppiamento della complessità ciclomatica
e così via e così via e uno dei
i modi per farlo naturalmente sono da usare
utensili e ci sono un certo numero di strumenti
là fuori che può aiutarti a crearne
funzioni di fitness che gestiscono un chirurgo
su quanto è buono o cattivo il tuo codice oggettivamente
è uno strumento di analisi statica e tu hai a
mazzo di controllo violazione di architettura
strumenti quindi sto pensando a cose come
Assistente di JQ
possono scrivere regole con archi Java arc
unità e così via e così via e ciò che voi
può fare con questi strumenti è possibile iniziare
per definire regole che assomigliano un po ‘
questo quindi è la stessa cosa del
principi architettonici conosci i tipi
in Star Sawash web il nostro pacchetto web
non dovrebbe avere accesso a stelle stellari
Tagliare dati personali nel nostro accesso ai dati
pacchetto e tu integri queste cose
con il tuo processo di costruzione e, si spera
qualcuno fa qualcosa di stupido che metti
si interrompe e quindi si disattiva questa regola
perché è fastidioso ma questo è un
storia diversa
sì, lo facciamo tutti bene aggiungendo il tuo
test faccio un po ‘come questa idea
perché questo ci fa diventare un po ‘meglio
rispetto a dove siamo oggi però ci si sente
come un orribile hack quindi dobbiamo scrivere
un sacco di strumenti esterni per verificare
la vera attrezzatura che stiamo costruendo è di
una qualità decente e che proprio no
davvero mi sta bene perché possiamo
spegnilo, quindi qual è la risposta e il
risposta è forse abbiamo bisogno di ottenere una migliore
usando gli strumenti che abbiamo a nostra disposizione
oggi come il compilatore ed è a questo
la gente punta alla fine direbbe bene
aspetta un attimo, se si sta parlando
conosci Java e usa il compilatore e
modificatori di accesso
Java è difettoso
dicono perché Java è difettoso e loro
darti tutti i motivi per cui Java è
per il mio tipo di modificatore di accesso
prospettiva sai che non abbiamo così se
tu se hai un pacco non c’è
tipo di cosa sub package in Java e
lei molto rapidamente puoi esplorare il
diversi difetti della confezione Java
sistema e modificatori di accesso e cose
come questo e questo è giusto in una certa misura
tuttavia questo è ciò che abbiamo e a meno che
vuoi andare e scrivere nuove lingue
che hanno parole chiave di prima classe come
strato e servizio e componenti quindi
forse dovremmo solo cercare di capire
come si usa ora con questo in
mente ho un’altra opzione per te e
questa opzione è ciò che io chiamo pacchetto
componente ed è davvero una sorta di
approccio ibrido al pacchetto per strato e
pacchetto per funzionalità e cosa sono veramente
cercando di fare qui è che sto cercando di
raggruppare tutto il codice che
appartiene al nostro componente nello stesso
posiziona cosa intendo per componenti perché
questo è un orribilmente enormemente sovraccarico
termine ciò che intendo per componente è
essenzialmente questo è un raggruppamento di
funzionalità correlata si spera dietro a
bella interfaccia semplice pulita e questo
componente corre all’interno di qualcosa come un
applicazione se ti stai chiedendo dove
questo proviene da esso viene dal
astrazioni dietro il mio diagramma c4
complessiva così un sistema software è costituito
di contenitori non docker circa
applicazioni e autorità di origine dati
i contenitori contengono componenti componenti
sono costruiti da elementi di codice, quindi cosa sono
cercare di fare essenzialmente è ottenere il
vista dell’architettura del mondo da sposare
con la struttura del codice e il codice
vista del mondo e pacchetto di
il componente è praticamente così
la mia preferenza personale qua e là
sono diversi modi per fare questo, ma il mio
la preferenza personale è sempre da mantenere
il tipo di cose relative alla UI, sia
questo è l’ interfaccia utente web o ap è separato
dalle cose non visive quindi se lo sono
costruendo degli ordini dalla Contea che c’è
un controller di ordini che esegue ordini web
roba e c’è un sacco di
funzionalità relativa agli ordini non visivi
così il business service fa la logica del business
e l’accesso ai dati in modo da tutta questa cosa che sto
andando a chiamare un componente dell’ordine cosa
Sto cercando di fare qui è essenzialmente
applicare il pensiero basato sui componenti a
codice base monolitico , quindi questo è buono
pensiero basato su componenti vecchio stile
disegno basato su componenti applicato a
basi di codice monolitico e quello che sono
provare a fare qui essenzialmente è applicare
modularità come principio guida per a
molto dell’architettura e quindi
Decisioni strutturate di codice Finisco
facendo così sto pensando sempre a cosa sono
le grandi cose a grana grossa che io
vorrei che il mio sistema fosse realizzato
quali sono ad alto livello strutturale
blocchi elementari essenzialmente di maimana
applicazione monolitico l’altro modo di
guarda questo è fondamentalmente mi sto separando
interfaccia dall’implementazione questo è
un altro buon design vecchio stile
la tecnica interessante è esattamente questa
quello che vediamo con i micro-servizi non è vero?
così con pacchetto per componente sto andando
avere una sorta di interfaccia di qualche tipo
dell’interfaccia pubblica di Java e un intero
mazzo di pacchi protetto
codice di implementazione con il
microservizio che avrò di nuovo
una sorta di interfaccia pubblica Jason finita
Messaggi HTTP qualunque sia una sorta di
API pubblica in rete e un intero gruppo
di codice di implementazione privata te
non posso vedere all’interno di così se ho un
ordina un micro servizio che non puoi chiamare il mio
strato di dati all’interno degli ordini Micra così
è nascosto dietro l’ API pubblica il
stessa cosa vale per quello che sto cercando di
fare con pacchetto per componente quindi potrei
avere un sacco di classi e interfacce
vista dentro le mie componenti java ma tu
non posso accedere a questo perché lo sono
intenzione di utilizzare la protezione del pacchetto Javas
meccanismo e nascondilo dall’esterno
mondo quindi questo è un componente per java
pacchetto
si tratta di mettere alcuni limiti
Rize impermeabile attorno al mio codice, quindi questo
è tutto molto facile da fare bene ma il
diavolo è nei dettagli di implementazione
in modo da poter venire tutto il percorso attraverso questo
storia e avere un sacco di cose davvero belle
idee su come vuoi strutturare
la tua base di codice e poi tutto cade
giù che ultimo ostacolo e si finisce
con la grande palla di fango e tu no
so davvero com’è successo e il
la ragione spesso accade è a causa nostra
amici la parola chiave pubblica il numero
di volte persino persino letteralmente in ritardo
settimana ho passato un po ‘del mio codice
e stavo leggendo ero come questa cosa
non ha bisogno di essere pubblico cancellare noi
digita public di default e io no
sapere perché è la memoria muscolare un sacco di
strumenti che usiamo conosci gli ID che vai
attraverso i maghi e ti creano a
un sacco di lezioni pubbliche come smettere di fare
basta smettere di usare la chiave pubblica quando
non è necessario metà del tempo che cosa è
il problema è la parola chiave pubblica
una grande differenza tra l’organizzazione del codice
e codice incapsulante e il problema
stiamo usando la parola chiave pubblica è
ti stai davvero perdendo molti dei
benefici relativi al pozzo di incapsulamento
questi due concetti sono molto molto
diverso ti ho dato quattro esempi
di alcune funzionalità relative agli ordini
numero uno pacchetto per livello numero due
pacchetto per funzionalità numero tre porte
e numero di adattatori per il mio pacchetto di a
approccio componente se prendiamo questi quattro
semplici esempi e assumiamo che tutto
di quelle interfacce e classi sono fatte
pubblico quindi di nuovo questo è uno slot java
ma puoi applicarlo ad altri
lingue se noi se facciamo il
assunzione di tutti questi tipi nel
gli esempi sono pubblici se ne ottengono quattro
versioni della stessa cosa che sono molto
concettualmente diversi quindi sono
concettualmente diverso architettonico
stili e strutture ma sono
in realtà sintattico
identico quindi ecco i quattro esempi
steso fianco a fianco impacchi doppio strato
seleziona le mie future porte e adattatori
pacchetto per componente se lo facciamo
assunzione a tutti questi tipi in
questi pacchetti di pubblico tutto ciò che siamo
l’utilizzo di questi pacchetti è per l’organizzazione
le loro cartelle simili non abbiamo
incapsulamento che sta succedendo qui
quindi se rimuoviamo questi pacchetti da
questi diagrammi di classe lo ottieni
sono tutti uguali
è un trucco buono, non è questo va a
lungo modo per spiegare come a volte
quando guardo dico porte e adattatori
base di codice sembra un layered
architettura e spesso è perché lascia
tutte le frecce combaciano, sei solo
scaricare classi pubbliche in diversi
pacchetti ma non c’è incapsulamento
quindi devi essere molto attento
con l’uso della parola chiave pubblica noi
hanno modificatori di accesso anche se in Java e
altre lingue quindi se usiamo l’accesso
modificatori in modo appropriato possiamo iniziare a
disegnare alcune immagini molto diverse quindi sono
andando a riportare i pacchetti su
questo diagramma e sto per svanire
Ho intenzione di oscurare il
tipi di implementazione che potrebbero
potenzialmente essere reso pacchetto Java
protetto e quindi nascosto all’esterno
quel pacchetto è sorta di deve lavorare
questo attraverso nella tua testa così nel
esempio di architettura a strati questo ordini
il controllore ha bisogno di accedere a questo ordine
servizio quindi è necessaria questa interfaccia di servizio
essere pubblico la classe di implementazione
può essere protetto in modo sicuro se
ti stai chiedendo come fai a creare un’istanza
un pacchetto protetto classe chiedi a Spring
lo farai per te in tutto questo
classe di implementazione del servizio per utilizzare questo
ordini repository l’interfaccia deve
può essere di nuovo il costo di implementazione pubblica
essere protetto da un pacchetto
con pacchetto per funzionalità ne hai bisogno
una sorta di punto di ingresso pubblico in questo
pacchetto e tutto il resto può essere
nascosto dal mondo esterno assumendo
nessun’altra fetta ha bisogno di accedere a cose dentro
questo pacchetto di ordini con le porte e
adatta di nuovo l’architettura a quella cosa
deve essere reso pubblico perché è
accessibile dal mondo esterno
questa interfaccia deve essere resa pubblica
la classe di implementazione può essere impacchettata
protetto e questa interfaccia deve essere
pubblico perché è dipende da
da questo pacchetto potenzialmente protetto in
costi di relazione seduti fuori in porto
nel mio pacchetto il mio componente di nuovo quello
la cosa è solo pubblica e noi abbiamo un
interfaccia pubblica qui e un sacco di
pacchetto protetto codice di implementazione così
ora puoi vedere che sono effettivamente stratificati
le architetture e gli adattatori di porte non lo sono
diverso a seconda di come si guarda
a loro considerando che queste altre due versioni
sono abbastanza diversi e questa è la cosa
è sempre la pena di avere un po ‘di più
pensando tempo e facendo in modo che il
modo in cui implementate concretamente
codice corrisponde a come si intende
sei un artificiere da guardare dall’alto verso il basso
prospettiva e una delle cose che
pensi che dovresti fare qui è usare
incapsulamento e davvero uso
incapsulamento per minimizzare il numero di
potenziali dipendenze se hai un
codice base e tutto è pubblico
tutto può essere chiamato da tutto
altro e hai un sacco di potenziale
dipendenze una volta che si inizia a nascondere il codice
e usando le informazioni nascoste in a
capsulazione che puoi avere solo
le dipendenze dalle cose pubbliche meno sono
cose pubbliche ne hai di meno
potenziali dipendenze che puoi avere e
l’ altro modo di vederlo è questo il
superficie di qualsiasi API pubblica interna
dovrebbe corrispondere al tuo intento architettonico
quindi se hai un diagramma attivo che come
un insieme di componenti o moduli e
i livelli assicurano che il tuo codice lo rispecchi
allora quella gente non può bypassare ciò che tu
considerato come un modulo o componente
e inizia ad accedere direttamente a internals
quindi, basandomi su quello che sto dicendo qui, se tu
stai costruendo una tua applicazione etica
avere alcune opzioni qui per usare il
compilatore
per far rispettare alcuni dei tuoi elementi architettonici
confini e le tue idee architettoniche
nella tenda questo è come il semplice
la versione di tutta la storia, perché una volta
prendi queste idee puoi andare
puoi fare un numero di passi ulteriore e
ci sono altri modi per fare coppia
gli elementi del codice, ad esempio, puoi usare a
struttura del modulo come il nuovo / vecchio
Framework di moduli Java 9 che le persone sono
non lo si utilizza il framework modulo Java
ti consente di distinguere i tipi pubblici
dai tipi pubblicati in modo da poter scrivere
la tua intera base di codice come un mucchio di
tipi pubblici e quando crei il tuo
modulo manifest solo esportazione e
pubblicare sottoinsiemi specifici di questi tipi
se qualcuno cerca di usare il tuo pubblico
tipi che non sono pubblicati non possono
fallo così ci sono i framework dei moduli
là fuori che ti permettono di creare nuovamente
questa distinzione questa coppia 2d
interfaccia dall’implementazione che potresti
anche andare oltre e dividere la tua fonte
albero in più parti in modo multiplo
moduli maven great great Draven
ovviamente graving un grado su moduli e
così via e così via, così ne hai uno
albero del codice sorgente per oggetto per modulo
per strato qualunque cosa tu debba fare
attenzione a questo se si sta facendo le porte
e gli adattatori che conosci avere separato
gli alberi fonte sono un suggerimento raccomandato
approccio perché uno degli anti- brevetti
Vedo con lo stile di porte e adattatori
architetture è che hai due basi di codice
uno per il materiale nel mezzo e uno
per tutto il resto intorno
quindi hai come un albero dei sorgenti di dominio
e un albero di sorgenti dell’infrastruttura e
il problema con questo è se tu
avere un albero sorgente con tutto il tuo
codice di infrastruttura è molto facile per
codice di infrastruttura per parlare con ciascuno
altro ancora se tagli le tue porte
e il codice degli adattatori direttamente in più
codice alberi puoi fermare questa cosa
per esempio al momento della compilazione
il problema di fare questo è molto
di trade-off perché più fonte
alberi hai più lento e più
complicato il processo di compilazione diventa così
probabilmente c’è un po ‘di dolcezza
dipende da cosa sei tu
costruendo nel dimensionamento di vediamo di
la cosa che stai costruendo più in generale
ovviamente ogni modalità di disaccoppiamento ha
diversi trade-off e questo è dove
in realtà torniamo a Microsoft in
perché i micro-servizi sono se ti piace
la modalità definitiva di disaccoppiamento non lo è
piuttosto che avere un po ‘di codice in codice
di sedersi nello stesso processo con alcuni
i confini intorno a te sono separati
processi con essenzialmente reti in
il modo in cui questo è il massimo
modalità di disaccoppiamento ma ci sono un sacco di
trade-off associati a farlo
e questo solleva una domanda piuttosto complicata
come fai a sapere quale stile di
l’architettura ti si addice
vai dal monolite o vai?
dal mio corredo contro e
sfortunatamente vedo molte persone
saltando su micros
per motivi di moda e hype e
stanno fallendo questo è ciò che George
Fairbanks di nuovo nel suo libro chiamato
architettura in diversi disegni così
scegliendo un’architettura che sceglie il
suolo solo perché perché no e non proprio
pensando attraverso i trade-off e il
avvertimenti su quel particolare
scelta architettonica una delle cose che ho
raccomandare alle persone di usare l’agilità come a
attributo di qualità quindi attributi di qualità
sono cose come le prestazioni del ridimensionamento
e disponibilità e così via
agilità quindi quanto velocemente devi muoverti
una squadra e quali parti della tua base di codice
quali parti del tuo sistema devono spostarsi
veloce quali parti della tua base di codice sono
potenzialmente più volatile di altri
e forse usi questa informazione come
modo per rendere molto più informato
decisione quindi forse hai il grosso di
il tuo codice in un monolite e un mucchio di
piccoli servizi in tutto il bordo che
bisogno di quella volatilità o che deve essere
in grado di cambiare con quella volatilità
piuttosto e in tutto questo un bene
l’architettura ti dà una divinità e di nuovo
questo tipo di senso ha non se
hai mai visto quei grandi codici orribili
basa le grandi palle di fango agli spaghetti
sistemi di codice quando si modifica qualcosa
qui un sacco di roba qui si rompe
e tu non sai perché e ti rallenta
una buona architettura ti dà un
Jill T quello che intendo per un bene
l’architettura è alquanto soggettiva
ma quello che intendo per un buon architetto è
qualcosa con
Sono modulare , è qualcosa che ha un
buona struttura ben definita e uno il
la promessa qui è che non si ottiene per quello
gratis quindi devi metterne in anticipo
pensando di chiamarlo design in anticipo per
vieni in una bella struttura ben definita
e questo è uno dei motivi per cui
la gente salta sui versi di mike rizzo perché
microservizi ti offre una strategia per
decomposizione e modularità è a
una serie di processi separati in esecuzione
in giro sulla tua rete in modo che le persone lo usino
architetture di micro servizi da applicare
confini del codice e in molti dei
conferenza parla certamente nel passato
pochi anni trovi sempre persone
confrontando questa cosa con queste cose
quaggiù questi orribili monolitici grandi
palle di fango e questo è davvero ingiusto
significa storicamente monolitico
le applicazioni sono sembrate così
ti darei sicuramente questo, ma questo
è un paragone davvero ingiusto perché
quello che vedo un sacco di gente è loro
Diciamo che abbiamo uno di questi e lo siamo stati
costruendo uno di questi per 10 o 15 anni
ed è un casino e non possiamo cambiare
è troppo lento per aggiungere funzionalità ora
quindi quello che faremo è riscriverlo
da zero in quello stile posso vedere
la gente sta andando davvero sì ho avuto un
numero di organizzazioni con cui ho parlato
quest’anno che fondamentalmente mi ha detto queste
questa storia esatta e quello che poi 14 finiscono
facendo è che finiscono per prendere il loro
approccio alla costruzione di quello e si attaccano
tipicamente chiamate HTTP sincrone tra
le cose nel monolite e finiscono
con quello e inoltre tutto questo
deve essere dispiegato, ma hey noi
fare micro servizi su porta kubernetes CV
design guidato in modo da sapere praticamente loro
finire con una versione distribuita bene
lì prima che è davvero male
esibirsi e così via e così via ora
questo è un confronto molto più equo che vorrei
come le persone a magari solo farlo prima
così come ti ho descritto durante questo
parlare è possibile creare modulare
monoliti devi pensare un po ‘
in questo devi fare
a cui si riflette la struttura del codice
idee architettoniche nel decimo e
di nuovo usi l’agilità come qualità
attributo
forse hanno la maggior parte delle tue funzionalità in questo
cosa e hai un sacco di servizi
fluttuando intorno al bordo dove questo
ha senso c’è un po ‘ più difficile
parte di tutto ciò andrò a saltare
finito e questo è in realtà fare design
e la gente dice bene come si progetta
software Sono come abbiamo fatto prima
vai a guardare Wikipedia e tu li mostri
la pagina sulla decomposizione come oh
è interessante
si e tu dici loro che ci sono
diversi modi per scomporre una cosa in
cose più piccole non lo sapevo neanche io
e sembra che abbiamo perso il
capacità di descrivere come effettivamente facciamo
progettare perché le persone semplicemente progettano ma
non possono dirti il sottostante
principi su come ti progettano
lo so, ma è una decomposizione funzionale
o decomposizione basata sulla volatilità e così via
e così via e poi ogni volta che vai
ai microservizi si parla in questi giorni di persone
finiscono per parlare dei partner e loro
finiscono per mostrare uno screenshot di questo
carta e loro cancellano la parola
modulo e sì servizio di consegna o
micro servizio in là e c’è a
un sacco di cose che abbiamo imparato
in passato questo è davvero dagli anni ’70
documenti interessanti che hai sicuramente letto
e c’è un sacco di
roba interessante in passato su bene
design e alta coesione e basso
accoppiamento e responsabilità e
volatilità e l’abbiamo appena dimenticato
tutto e tutti questi argomenti si applicano a
ogni sorta di un sistema software noi
dovrebbe mai costruire un bene
l’architettura ti dà una buona agilità
la struttura ti dà agilità e poi
la gente ti chiede bene come possiamo arrivare
a un insieme di cose e tu dici di nuovo
non c’è più tecniche vanno là fuori
imparali dice qualcosa chiamato CRC
è un vecchio laboratorio ad alta tecnologia usato per
essere abbastanza bene usato per il tipo di
Rupp epoca processo unificato Rush è caduto fuori
moda ha classe nelle classi di nome
responsabilità collaboratori è a
lavoro di shopping tecnica per fare lezione
il design della torre non lo facciamo a livello di classe
progetta più in riunioni ma tu
prendere questo approccio e si strofina fuori
questa prima parola e la fai
componente
o modulo o micro servizio e ottieni
lo stesso approccio si ottiene lo stesso
approccio di progettazione collaborativa applicato a
un alto livello di astrazione in modo da ottenere
bravo nel design, si ottiene un buon design
prima devi buttare roba in un monolito
una volta che sei soddisfatto del tuo design e
il tuo approccio alla decomposizione nel
monolite quindi fai uscire qualcosa
il mondo dei micro servizi se ne hai bisogno
scrivi così che l’ architetto dei servizi di Mike lo faccia
fornire un sacco di vantaggi agilità
resilienza della scalabilità e così via e così via
su così via, ma è molto più difficile da gestire
con più parti mobili automatiche
aggregazione dei log di monitoraggio di provisioning
paghi anche di più così uno dei
ragioni per cui ho sollevato la struttura di Iser
giusto l’inizio perché è un avvio
come una singola persona di avvio voglio
consegnare cose veloci non voglio essere
trascorrere mesi a fare scherzi
aggregazione di log di docker kubernetes
quadri e tutte queste cose io solo
voglio buttare cose sul web e ottenere
persone che utilizzano in modo struttura è troppo
monoliti modulari che non devo affrontare
con tutta questa roba ancora, ma ho potuto
fai se volevo, quindi scegli Mike
servizi se ti danno benefici no
perché il tuo codebase è un disastro ora
perché non risolverà nessuno
problemi, naturalmente, ciò che si avvicinano
fare se si tratta di un monitor
monolite o cos’è quello su micro
servizi non dimenticare il
i dettagli di implementazione sono così definitivamente
consapevole di questo uso eccessivo della chiave pubblica
parola per esempio quando stai costruendo
applicazioni monolitiche e sicuramente
essere consapevoli del codice del modello, quindi se si
mai voglia di commercializzarlo a diagrammi e
assicurati che corrispondano al tuo codice e quello
è fondamentalmente che grazie mille
[Applausi]
Please follow and like us: