Questa sezione descrive un insieme di moderni standard per descrivere i âweb componentsâ.
Ad oggi, questi standards sono ancora in fase di sviluppo. Quindi, alcune funzionalità sono ben supportate ed integrate nellâattuale standard HTML/DOM, mentre altre sono ancora allo stadio Draft. Possiamo provare gli esempi in qualunque browser, ma Google Chrome è probabilmente il più aggiornato con queste funzionalità . Ed indovinate un poâ, ciò è dato dal fatto che dietro a molti dei concetti relativi a queste specifiche ci siano le realtà che ruotano attorno a Google.
Cosa câè in comune traâ¦
Lâidea generale del componente non è nulla di nuovo. Viene usato dappertutto, ed in tantissimi frameworks.
Prima di spostarci nei dettagli di implementazione, però, diamo unâocchiata a questa grandiosa conquista dellâumanità :
Questa è la Stazione Spaziale Internazionale (ISS).
E così è come è fatta dentro (approssimativamente):
La Stazione Spaziale Internazionale:
- Consta di moltissimi componenti.
- Ogni componente, a sua volta, contiene allâinterno tanti componenti e dettagli, ancora più piccoli.
- I componenti sono molto complessi, e molto più complicati della maggior parte dei siti web.
- I componenti vengono sviluppati a livello internazionale, da team di paesi differenti, che parlando lingue differenti.
â¦E questa cosa orbita, mantenendo delle persone in vita nello spazio!
Come vengono create delle strutture così complesse?
Quali principi possiamo prendere in prestito, per rendere il nostro sviluppo affidabile e scalabile allo stesso modo? O almeno, per quanto possibile, avvicinarci un poâ.
Architettura di un componente
La ben nota regola per sviluppare del software complesso è: non sviluppare software complesso.
Se qualcosa diventa complesso, dividerlo in parti più semplici e connetterli nella maniera più ovvia.
Un buon architetto è colui che può rendere cose complesse, semplici.
Possiamo dividere visivamente lâinterfaccia utente in componenti: ognuno di essi ha la propria posizione nella pagina, e il suo compito ben preciso, ed è separato dagli altri.
Guardiamo un sito web, per esempio Twitter.
Possiamo dividerlo abbastanza naturalmente in componenti:
- Barra di navigazione superiore.
- Informazioni utente.
- Suggerimenti di utenti da seguire.
- Form di invio.
- (e inoltre 6, 7) sono messaggi.
I componenti possono avere sotto-componenti, per esempio i messaggi possono essere parte di un componente âlista di messaggiâ di livello superiore. Una immagine di un utente può essere, essa stessa, un componente, e così via.
Come possiamo decidere cosa sia un componente? Ciò arriva dallâintuizione, lâesperienza ed il buon senso. Solitamente è una entità separata a livello visivo, che possiamo descrivere in termini di âcosa faâ e di âcome interagisceâ con la pagina. Nellâesempio precedente, la pagina è divisa in blocchi, ognuno dei quali gioca un ruolo, quindi è logico farne dei componenti.
Un componente ha:
- Una propria classe JavaScript
- Una struttura DOM, gestita esclusivamente dalla sua classe, ed il codice esterno non può accedervi (principio di âincapsulamentoâ).
- Stili CSS, da applicare al componente.
- API: eventi, metodi della classe etc, per poter interagire con altri componenti.
Ancora una volta, il concetto di âcomponenteâ non è niente di speciale.
Ci sono una serie di frameworks e metodi di sviluppo per costruirli, ognuno con le proprie âfantastiche e super attraentiâ caratteristiche. Solitamente, vengono usate classi CSS e convenzioni specifiche per trasmettere la âsensazione di frameworkâ, scoping CSS ed incapsulamento del DOM.
I âWeb componentsâ forniscono capacità built-in nel browser per questo, quindi non abbiamo più bisogno di emularli.
- Custom elements â per definire elementi HTML personalizzati.
- Shadow DOM â per creare un DOM interno e visibile solo al componente stesso, ma nascosto agli altri.
- CSS Scoping â per dichiarare stili applicabili esclusivamente dentro lo Shadow DOM del componente.
- Event retargeting altre funzionalità minori per rendere i componenti personalizzati più adatti allo sviluppo.
Nel prossimo capitolo entreremo nei dettagli dei âCustom Elementsâ, una funzionalità fondamentale e ben supportata dei web component, ottima anche anche usata da sola.
Commenti
<code>, per molte righe â includile nel tag<pre>, per più di 10 righe â utilizza una sandbox (plnkr, jsbin, codepenâ¦)