Arquitecturas de Componentes Web. Patrones de Composición

79
Javier Vélez Reyes @javiervelezreye [email protected] Patrones de Composición Arquitecturas Orientadas a Componentes Web Noviembre 2016

Transcript of Arquitecturas de Componentes Web. Patrones de Composición

Page 1: Arquitecturas de Componentes Web. Patrones de Composición

JavierVélezReyes@javiervelezreye

[email protected]

PatronesdeComposición

ArquitecturasOrientadasaComponentesWeb

Noviembre2016

Page 2: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye2

AutorPatronesdeComposición

LicenciadoporlaUPMdesdeelaño2001ydoctoreninformá<caporlaUNEDdesdeelaño2009,Javierconjugasuslaborescomoprofesore inves<gador con la consultoría y la formación técnica paraempresa. Su línea de trabajo actual se centra en la innovación ydesarrollodetecnologíasparalaWeb.Ademásrealizaac<vidadesdeevangelización y divulgación en diversas comunidades IT y escoordinadordevariosgruposdeámbitolocalcomoNodeJSMadridoMadridJS.FormapartedelprogramaPolymerPolytechnicSpeakeryesmentordelcapítulodeMadriddeNodeSchool.

¿QuiénSoy?

[email protected]

@javiervelezreye

linkedin.com/in/javiervelezreyes

gplus.to/javiervelezreyes

jvelez77

javiervelezreyes

youtube.com/user/javiervelezreyes

Page 3: Arquitecturas de Componentes Web. Patrones de Composición

JavierVélezReyes@javiervelezreye

[email protected]

1Introducción§  ArquitecturadeReferenciaparaComponentesWeb§  ArquitecturadeReferencia&Composición§  ElProblemadeComposición

Introd

ucción

Patron

esdeCo

mpo

sición

Page 4: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye4

IntroducciónPatronesdeComposición

I.ArquitecturadeReferenciaParaComponentesWebUna arquitectura de referencia establece orientaciónacercadecómopuedenconstruirsesolucionesorientadasacomponentesWeb.

Data

Session

Offline

Integra<

on

Access

RoleBased

ChannelBased

ContextBased

View

Con

trol

Paging

Rou<

ng

Conten

t

Containe

rs

Interac<on

Performance Security

Monitoring Authe.&Autho.Op<miza<on WC&ResourceManagement

Layers

No<

fica<

on

UserBased

Channel

View

ers

Coop

era<

on

Coordina<on

Comunica<on

Composi<on

UniversalApp

s

Page 5: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye5

PatronesdeComposiciónPatronesdeComposición

III.ElProblemadeComposiciónLaComposiciónenPalabrasLa composición es el proceso por el cual se establece unconjuntodeenlacescomposi<vosentrecomponentesparapermi<rlacomunicación.

Qué

Lacomposiciónesunprocesolocalque,enprincipio,sóloatañealpardecomponentesenlosextremosdeunenlacecomposiBvo

AcRvidadbilateral

ComponentePar<cipante

Componenteobje<vo

Cubiertodichoespacioseposibilitalacomunicaciónentrecomponentesloqueasuvezdapasoacolaboraciones

Habilitarlacomunicación

Page 6: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye6

PatronesdeComposiciónPatronesdeComposición

III.ElProblemadeComposición

Localización

Adaptación

Enlace

Contextualización

Descubrirloscomponentesdelavecindadorientadosacooperarconmigo

Localizar

Configurarelentornodecomposi-ciónparaoperarsobreuncontextoadecuado

Contextualizar

Vincularmealrestodecomponen-tesdemivecindadparahacerefecBvalacomunicación

Enlazar

Transformarmeyoymientornoparapoderencajarenelmarcoarquitectónico

Adaptar

Componenteobje<vo

ElProcesodeComposición.PerspecRvadeCajaBlancaInternamente, el proceso de composición se en<endecomo una sucesión de 4 fases que se desarrollan encascada:localizar,adaptar,enlazarycontextualizar.

Cómo

Page 7: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye7

PatronesdeComposiciónPatronesdeComposición

III.ElProblemadeComposiciónComposiciónEstáRca&DinámicaLacomposiciónestá<caseproduceunavezalprincipiodelciclo de vida. La composición dinámica se repiterecurrentementeenrespuestaacambiosambientales.

NiveldeDo

minio

Metacomponentes

NiveldeProyecto

ComposiciónEstáRca

ProcesodeComposición

Componenteobje<vo

Cuándo

NiveldeDo

minio

Metacomponentes

NiveldeProyecto

ProcesodeComposición

<empo

C.Dinámica

Fase#1 Fase#2 Fase#3

attached eventos attached

Page 8: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye8

PatronesdeComposiciónPatronesdeComposición

III.ElProblemadeComposiciónConstrucciónporComposiciónEnlaetapademadurezIeldesarrolloseorientaacliente,seoperaamuybajoniveldeabstraccióny los índicesdereu<lizaciónsoncasiinexistentes.

Dónde

addEventListener this.x++

this.setInterval

<p> <div>

<aside>

<h1> <a>

<img>

NaR

veW

eb

HTML JS

Diseño

EtapaI.

Desarrolloa

Med

ida

Page 9: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye9

PatronesdeComposiciónPatronesdeComposición

III.ElProblemadeComposiciónConstrucciónporComposiciónEnlaetapademadurezIIseconstruyencomponentesWebque encapsulan modelos de interacción recurrentes. Sefomentalaabstracciónylareu<lización.

Dónde

addEventListener this.x++

this.setInterval

<p> <div>

<aside>

<h1> <a>

<img>

HTML JS

Diseño

NaR

veW

eb

EtapaI.

Desarrolloa

Med

ida

HTML JS

Polymer

this.async

this.fire <content>

<template>

Construyo

EtapaII.

Creación

de

Compo

nentes

Page 10: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye10

PatronesdeComposiciónPatronesdeComposición

III.ElProblemadeComposiciónConstrucciónporComposiciónEnlaetapademadurezIII,lascorporacionesreconocenlasventajas de operar con un catálogo de componentes. Seconstruyenaplicacionesporcomposicióndeclara<va.

Dónde

Compo

nentesW

ebHTML

<shadow> <shadow> <shadow> <shadow>

CatálogoWC Uso

EtapaIII.

Gobierno

de

Compo

nentes

HTML JS

addEventListener this.x++

this.setInterval

<p> <div>

<aside>

<h1> <a>

<img>

Polymer

this.async

this.fire <content>

<template>

HTML JS

Diseño

Construyo

NaR

veW

eb

EtapaI.

Desarrolloa

Med

ida

EtapaII.

Creación

de

Compo

nentes

Page 11: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye11

PatronesdeComposiciónPatronesdeComposición

III.ElProblemadeComposiciónConstrucciónporComposiciónConstruir por composición consiste en combinarestratégicamente lógicareu<lizableencomponentesWebconlógicacomposi<vaespecífica

Dónde

Compo

nentesW

ebHTML

<shadow> <shadow> <shadow> <shadow>

EtapaIII.

Gobierno

de

Compo

nentes

SepretendearBcularunmodelodeinteracciónqueofrezcaunasensacióndeconBnuidadensuuso

ExperienciadeConRnuidad

LógicadeComposición

ComponentesReu<lizables

+Nivelde

Proyecto

Nivelde

Dominio

CómoconstruirsolucionescombinandocomponentesycódigopegamentodeformadeclaraBva

ConstrucciónporComposición

?

Page 12: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye12

PatronesdeComposiciónPatronesdeComposición

III.ElProblemadeComposiciónConstrucciónporComposiciónConstruir por composición consiste en combinarestratégicamente lógicareu<lizableencomponentesWebconlógicacomposi<vaespecífica.

DóndeA.ComposiciónCentralizada

B.ComposiciónDistribuida<shadow> <shadow>

<shadow> <shadow>

§  Abstracción§  Acoplamiento

§  Reu<lización§  Declara<vidad§  Composi<vidad

§  Produc<vidad

§  Abstracción§  Acoplamiento

§  Reu<lización§  Declara<vidad§  Composi<vidad

§  Produc<vidad

ModelodeComposición

PatrónMediator

HTML

HTML

JS

Page 13: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye13

PatronesdeComposiciónPatronesdeComposición

III.ElProblemadeComposiciónConstrucciónporComposiciónConstruir por composición consiste en combinarestratégicamente lógicareu<lizableencomponentesWebconlógicacomposi<vaespecífica

Dónde

EtapaIII.

Gobierno

de

Compo

nentes

Compo

nentes

Web

HTML

<shadow> <shadow> <shadow> <shadow>

Códigopegamentorecurrentetambiéncomocomponentes

EncapsulacióndeLógicaComposiRva

LacomposicióncomounejerciciodeconfiguracióndeclaraBva

ConfiguracióndeclaraRva

Elcomportamientodelosartefactosdecomposiciónesflexibleyabierto

FlexibilidadcomposiRva

ComponentesPa

ra

Componer

Abstracción

Reu<lizació

n

Declara<vid

adComposi<

vidad

Page 14: Arquitecturas de Componentes Web. Patrones de Composición

JavierVélezReyes@javiervelezreye

[email protected]

2PatronesdeComposición

§  ElProcesodeComposicióncomoMarcoOrganiza<vo§  PatronesdeLocalización&Adaptación§  PatronesdeEnlace&Contextualización

Patron

esdeCo

mpo

sición

Patron

esdeCo

mpo

sición

Page 15: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye15

PatronesdeComposiciónPatronesdeComposición

I.PatronesdeComposición U<lizaremos el proceso de composición como marco

organiza<vo para ordenar los patrones que presentamosenestesubsistemaarquitectónico.

Localización

Adaptación

Enlace

Contextualización

Page 16: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye16

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización Los patrones de localización exploran un espacio de

búsquedaparalocalizarotroscomponentesdelavecindadconlosqueestablecervínculoscomposi<vos.

Localización

Espa

ciosDOM

EspaciosdeDatos

AunquemenosuBlizados,tambiéndebenconsiderarseaquellosespaciosdeJSdondepuedenalojarsecomponentesacBvosenmemoria.EnestecasoseusantécnicasdeLookUp

TécnicasdeLookUp

MuchosdelosprocesosdelocalizaciónoperansobreespaciosDOMdonderesidenotros

componentesalojadosallíenBempodediseño.Sobreellosseaplicantécnicasdebúsqueda

exploratorias

TécnicasdeExploraciónLight DOM

Shadow DOM

Composite DOM

Host DOM

DOM

Local

Prototype

Lexical Scope

Global

AcRvidadesdeLocalización

Page 17: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye17

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración Las técnicas de exploración operan sobre los espacios

DOM. Estás pueden clasificarse en localización odescubrimiento.

DOM

HostDOM

<wc-me>

</wc-me>

LightDOM ShadowDOM

CompositeDOM

<wc-container>

</wc-container>

shadowRoot

EspaciosdeExploración TécnicasdeExploración

handle

estrategiascope

Componentesalcanzados

<wc-me>

<wc-container>

LightDOM ShadowDOM

<wc-me>

<wc-container>

seachsearchAll

wc-scout

Page 18: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye18

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Se requiere llevar a cabo un proceso de exploración sobre undeterminado ámbito DOM u<lizando técnicas de exploración ycriteriosdeselecciónespecíficos.

El componente wc-scout es responsable dear<cularunprocesodebúsquedaexploratoriaparabuscarcomponentesenlavecindad.

ExploradorScout

El componente se configura indicando unaestrategia de búsqueda, un espacio sobre elquebuscaryuncriteriodebúsqueda.

<wc-scout result="{{out}}"> <wc-x strategy/> <wc-y handle/> <wc-z criteria/> </wc-scout>

Cadaunoauncomponenteimplementaráciertalógicadeestrategia,alcanceocriteriosegúncorrespondacomoveremosaconBnuación

wc-scout handle criteria strategy

getHandle()

getReference()

search(h,r)

h

r

xsfilter(xs)

xsxs

search()

Page 19: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye19

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Se requiere llevara cabounprocesodeexploraciónbasadoenunaestrategiadescendenteparaencontrarcomponentesbajoelhandle.

El componente wc-falling implementa laestrategia de prospección clásica de la webbasadaenlocalizarelementosbajounnodo.

EstrategiadeCaída

El componente se configura indicandoesencialmente si la estrategia debe hacerprospecciónenloscontenidosenlasombra.

<wc-scout> <wc-falling strategy shadow/> <wc-y handle/> <wc-z criteria/> </wc-scout>

LaestrategiadescendentebuscaelementosquecaenbajoundeterminadonodoDOM

Estrategias

handle

scope

Estrategiadecaída

Componentesalcanzados

Indicaquelaestrategiadebehacerprospeccióntambiénenloscontenidosenlasombra

Page 20: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye20

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Se requiere llevara cabounprocesodeexploraciónbasadoenuna estrategia ascendente para encontrar componentes en lacadenadeantecesoresdelhandle.

El componente wc-climbing implementa unaestrategia de escalado para encontrarelementosenlacadenadeantecesores.

EstrategiadeEscalado

El componente se configura indicandoesencialmente si la estrategia debe con<nuarelescaladoalllegaralnodoraíz.

<wc-scout> <wc-climbing strategy host/> <wc-y handle/> <wc-z criteria/> </wc-scout>

LaestrategiaascendentebuscaelementosquecaendentrodelacadenadeantecesoresdeundeterminadonodoDOM

Estrategias

handle

scope

Estrategiadeescalado

IndicaquelaestrategiadebeatravesarlaraízenlasombrayconBnuarascendiendoporelnodohost

Componentesalcanzados

ShadowDOM

HostDOM

[host]

Page 21: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye21

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Se requiere llevara cabounprocesodeexploraciónbasadoenunaestrategia por inundaciónpara encontrar los componentesmáspróximosalhandle.

El componente wc-flooding aplica unaestrategia de búsqueda que alternarecursivamenteelescaladoylacaída.

EstrategiaporInundación

El componente se configura indicandoesencialmentesidebehacerprospecciónenlasombrayescaladohaciaelhost.

<wc-scout> <wc-flooding strategy host shadow/> <wc-y handle/> <wc-z criteria/> </wc-scout>

LaestrategiaascendentebuscaelementosquecaendentrodelacadenadeantecesoresdeundeterminadonodoDOM

Estrategias

SeuBlizanlosmismosflagsqueaparecíanenlasestrategiasdecaídayescalado

ShadowDOM

HostDOM

[host]

handle

scope

Estrategiaporinundación

Componentesalcanzados

Page 22: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye22

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Se requiere iden<ficar el handle correspondiente a la propiaubicación donde reside el componenteswc-scout. Es frecuentear<cularestrategiasdebúsquedaquecomienzanendicholugar.

El componente wc-self iden<fica el elementodelDOMcorrespondienteal componentewc-scout.

HandledeAuto-referencia

Laconfiguracióndelcomponentesólorequiereindicar el valor de la referencia CSS que seráu<lizadaparareferiralhandle.

<wc-self/>

Handles

Referenciaalaubicaciónencurso

HostDOM

<wc-me>

</wc-me>

LightDOM ShadowDOM

<wc-container>

</wc-container>

shadowRoot

CompositeDOM

<wc-self>

</wc-self>

Page 23: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye23

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Se requiere iden<ficar un handle a través del uso de unareferenciaCSS.Dichareferenciaesrela<vaalpuntodondeseusaelcomponente.

El componente wc-reference iden<fica unelementodelDOMatravésdeunareferenciaCSSrela<vaalaposicióndeestae<queta.

HandlePorReferencia

Laconfiguracióndelcomponentesólorequiereindicar el valor de la referencia CSS que seráu<lizadaparareferiralhandle.

<wc-reference ref="#A" handle/> <wc-reference ref="[[x]]" handle/>

Handles

Lareferenciaapuntaalnodohandle

Lareferenciaeselnodohandle

HostDOM

<wc-me>

</wc-me>

LightDOM ShadowDOM

<wc-container>

</wc-container>

shadowRoot

CompositeDOM

<wc-reference>

id="A" </wc-reference>

Page 24: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye24

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Serequiere iden<ficarelhandlecorrespondientealnodopadredesdeelquerealizamoslaaplicacióndeestrategiasdebúsquedaporexploración.

El componentewc-parent iden<fica el handleque corresponde al padre directo de estae<queta.

HandleParent

La configuración indica el número de saltosascendentesyeldesplazamientodescendentequeserealizaráunavezlocalizadoelhost.

<wc-parent handle steps="3" offset="#A"/>

Handles

Trasalcanzarelpadreescala3nodos.Después,dirígetea#Aparaalcanzarelhandle

Losparámetros(steps)y(offset)sonopcionales

HostDOM

<wc-me>

</wc-me>

LightDOM ShadowDOM

<wc-container>

</wc-container>

shadowRoot

CompositeDOM

<wc-host>

</wc-host>

<div>

</div>

Page 25: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye25

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Serequiereiden<ficarelhandlecorrespondientealnodoraízdelque cuelga el contenido en la sombra que corresponde alespacioDOMdondenosencontramos.

El componente wc-root iden<fica el handleque corresponde al nodo raíz que aloja elcontenidoenlasombradondeestamos.

HandleRoot

La configuración indica el número de saltosascendentesyeldesplazamientodescendentequeserealizaráunavezlocalizadoelhost.

Handles

HostDOM

<wc-me>

</wc-me>

LightDOM ShadowDOM

<wc-container>

</wc-container>

shadowRoot

CompositeDOM

<wc-root>

</wc-root>

<wc-root handle steps="3" offset="#A"/>

Trasalcanzarlaraízescala3nodos.Después,dirígetea#Aparaalcanzarelhandle

Losparámetros(steps)y(offset)sonopcionales

Page 26: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye26

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Se requiere iden<ficar el handle correspondiente al nodo hostque man<ene al contenido en la sombra que corresponde alespacioDOMdondenosencontramos.

El componente wc-host iden<fica el handlequecorrespondealnodoanfitriónquealojaelcontenidoenlasombradondeestamos.

HandleHost

La configuración indica el número de saltosascendentesyeldesplazamientodescendentequeserealizaráunavezlocalizadoelhost.

Handles

HostDOM

<wc-me>

</wc-me>

LightDOM ShadowDOM

<wc-container>

</wc-container>

shadowRoot

CompositeDOM

<wc-host>

</wc-host>

<wc-host handle steps="3" offset="#A"/>

Trasalcanzarelhostescala3nodos.Después,dirígetea#Aparaalcanzarelhandle

Losparámetros(steps)y(offset)sonopcionales

Page 27: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye27

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Se requiere iden<ficar el handle correspondiente al nodoprincipal del documento HTML desde el que realizamos laexploración.

El componente wc-document iden<fica elhandlequecorrespondealdocumentoraízdelaaplicaciónWeb.

HandleDocument

La configuración indica el desplazamientodescendente que se realizará una vezlocalizadoelnododocument.

<wc-document handle offset="#A"/>

Handles

Trasalcanzardocumentdirígetea#Aparaalcanzarelhandle

Elparámetro(offset)esopcionales

HostDOM

<wc-me>

</wc-me>

LightDOM ShadowDOM

<wc-container>

</wc-container>

shadowRoot

CompositeDOM

<wc-host>

</wc-host>

document

Page 28: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye28

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Paralocalizarunhandleserequierellevaracabounprocesoderecorrido por pasos sobre la estructura de espacios DOM. Encadapasoseaplicaunhandledelosanteriores.

El componente wc-road aplica encadena ensecuencia una colección de operaciones dehandlingparaalcanzarelhandledeseado.

HandleRoad

El componente se configura indicando lacolección de operaciones de handling quedebenaplicarseparallegaralhandlefinal.

<wc-road handle> <wc-host/> <wc-host/> <wc-parent offset="#A"/> </wc-road>

Handles

Cadapasodehandlingseaplicasobreelresultadoquearrojolaoperacióndehandlinganteriorenlacadena.Ejemplo:

§  Primero, alcanza el host §  Una vez en el, alcanza el host §  Ahora sube al padre §  Desplazate hasta localizar #A

HostDOM

LightDOM ShadowDOM

<wc-container>

</wc-container>

shadowRoot

CompositeDOM

<wc-host>

</wc-host>

<div>

</div>

<wc-a>

<wc-me>

</wc-me>

Page 29: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye29

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Serequiereaplicaruncriteriodebúsquedaclásicobasadoenelusode referencias CSS. La consulta será rela<va al handle y seaplicarálaestrategiaestablecida.

El componente wc-query, permite definir uncriterio de búsqueda basado en el uso dereferenciasCSS.

BúsquedaPorConsulta

El componente se configura indicando elcriterio de búsqueda que se desea aplicarsobreelespacio.

Criteria

<wc-scout> <wc-x strategy/> <wc-y handle/> <wc-query criteria ref=".A"/> </wc-scout>

Sobreelhandleydeacuerdoalaestrategiadeexploraciónestablecida,buscaa#A

handle

scope

Estrategiadecaída

Componentesalcanzados

Page 30: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye30

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Se requiere localizar componentes que respondan a undeterminadoproto<poJavaScript.Este<podebúsquedaofrecegaraniasdeunciertocomportamientoycaracterís<cas.

El componente wc-prototype devuelve lareferencia universal (*) al scout. Despuésaplica técnicasdefiltropara seleccionar a loscandidatosadecuados.

BúsquedaPorProtoRpo

El componente se configura indicandoesencialmenteel<poo<posdeproto<poquesedeseabuscar.

Criteria

<wc-scout> <wc-x strategy/> <wc-y handle/> <wc-prototype criteria type="wcA"/> </wc-scout>

<wc-scout> <wc-x strategy/> <wc-y handle/> <wc-prototype criteria in="wcA wcB wcC"/> </wc-scout>

Sintaxisdebúsqueda

única

SintaxisdebúsquedadisyunBva

wc-prototype strategy

getRefernce()'*'

xs

filter(xs)

wc-scout

search(h,'*')xs

filter(xs)xs

Page 31: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye31

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeExploración

Se requiere localizar componentes que respondan a undeterminado perfil JavaScript. Este <po de búsqueda ofrecegaraniasdeunciertocomportamientoycaracterís<cas.

El componente wc-prototype devuelve lareferencia universal (*) al scout. Despuésaplica técnicasdefiltropara seleccionar a loscandidatosadecuados.

BúsquedaPorPerfil

El componente se configura indicandoesencialmente el perfil buscado, como unacoleccióndecaracterís<cas

Criteria

<wc-scout> <wc-x strategy/> <wc-y handle/> <wc-profile criteria profile="{{pf}}"/> </wc-scout>

<wc-scout> <wc-x strategy/> <wc-y handle/> <wc-profile criteria> <wc-rule feature="p"/> <wc-rule feature="q"/> </wc-profile> </wc-scout>

SintaxisdinámicacomoarraydecaracterísBcas

SintaxisestáBcaconenumeración

explícita

wc-prototype strategy

getRefernce()'*'

xs

filter(xs)

wc-scout

search(h,'*')xs

filter(xs)xs

Page 32: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye32

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeLookUp Las técnicas de Look up ar<culan procesos de búsqueda

sobre los espacios de memoria que ges<ona JS. Sedis<nguenentreserviciosdepáginasblancasyamarillas.

EspaciosdeLookUp TécnicasdeLookUp

Polymer (

(function () {

return {

is : 'wc-me'

ready : function () {

}

};

})();

);

Global

RetenciónLéxica

Localthis.x =

protoRpothis.prototype.y =

A B

PáginasBlancas

A B

PáginasAmarillas

<wc-a>

<wc-b>

<wc-c>

P. Blancas

§  A

§  B

§  C

<wc-a>

<wc-b>

<wc-c>

P. Amarillas

§  [p, q]

§  [q]

§  [r, s]

Sebuscancomponentespormetadatosde

capacidadesyservicios

Sebuscauncomponenteporclave

deregistro

Accesoindividual

Accesoglobal

AccesoporBpo

Page 33: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye33

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeLookUp

Se requiere disponer de unmecanismo sencillo para compar<rdatos con agnos<cismo de su disposición geográfica en losespaciosDOM.

El behavior wc-single proporciona una formasencilla de proporcionar acceso en lógicasingletonaunalmacéndedatos.

AccesoÚnico

Se declara una variable (single) a nivel deproto<po para que sea compar<da por todaslasinstanciasdelmismo<podecomponente.

Behaviors = Behaviors || {};

Behaviors ['wc-single'] = {

ready : function () {

this.init (this.prototype.single);

}

};

Polymer ({

is : 'wc-store',

behaviors : [

Behaviors ['wc-single']

],

init : function (single) {

single = {}

...

}

});

SeregistraenelprotoBpouna

variable(single)Lavariablesepasacomoparámetroaunmétodoinitpara

suinicialización

wc-store

wc-store

DOM#1

DOM#2

WcStore(prototype)

single = {}

Page 34: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye34

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeLookUp

Serequieredisponerdeunmecanismopararegistraryrecuperarcomponentes con agnos<cismode sudisposición geográficaenlosespaciosDOM.

El componente wc-registry proporciona unadiccionario de datos para realizar tareas deregistroyrecuperaciónesenciales

RegistrodeComponentes

El componente se configura indicandoentradaspordefectoparalaconfiguracióndelregistro.

wc-registry

get(k)set(k,c)

wc-client-a

wc-client-b

DOMComún <wc-registry> <wc-rule key="A" target="{{c1}}"/> <wc-rule key="B" target="{{c2}}"/> <wc-rule key="C"> <wc-c></wc-c> </wc-rule> <wc-rule key="C"> <wc-reference ref="#D"/> </wc-rule> </wc-registry>

DisBntasformasdeintroducirentradaspordefectoenunregistrodecomponentes

DatosvoláBlesencuantosalimosdel

espacioDOM

Page 35: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye35

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeLookUp

Se requiere disponer de un almacén de componentes pararegistraryrecuperarcomponentesconfacilidadesdeaccesodepáginasblancas.

El componente wc-whites es una interfaz deacceso al registro que proporciona al clientecapacidadesdepáginasblancas.

PerfildePáginasBlancas

Elcomponenteseconfiguraindicandoquiénesel registro de componentes que se u<lizasobreelqueseopera.

wc-registry

get(k)set(k,c)

wc-white

findById(id)findAll()has(c)has(id)

<wc-white registry="[[reg]]"> </wc-white>

Sesuponeaccesoalregistro.Elcomponentesoloesun

adaptadorqueproporcionaunainterfazapropiadaparadarserviciosdepáginasblancas

Solounejemplodecómopuedeadaptarselainterfazderegistro

Page 36: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye36

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeLookUp

Se requiere disponer de un almacén de componentes pararegistraryrecuperarcomponentesconfacilidadesdeaccesodepáginasamarillas.

El componentewc-yellows es una interfaz deacceso al registro que proporciona al clientecapacidadesdepáginasamarillas.

PerfildePáginasAmarillas

Elcomponenteseconfiguraindicandoquiénesel registro de componentes que se u<lizasobreelqueseopera.

wc-registry

get(k)set(k,c)

wc-yellow

findByType(type)findAllByType(type)hasByType(type)

findByService(profile)findAllByService(profile)hasByService(profile)

Solounejemplodecómopuedeadaptarselainterfazderegistro

<wc-yellow registry="[[reg]]"> </wc-yellow>

Sesuponeaccesoalregistro.Elcomponentesoloesun

adaptadorqueproporcionaunainterfazapropiadaparadarserviciosdepáginasblancas

Page 37: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye37

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeLookUp

Se requiere disponer de un almacén de componentes pararegistraryrecuperarcomponentesconfacilidadesdecontroldeversiones

El componente wc-cvs es una interfaz deacceso al registro que proporciona al clientecapacidadesdecontroldeversiones.

PerfildeControldeVersiones

Elcomponenteseconfiguraindicandoquiénesel registro de componentes que se u<lizasobreelqueseopera.

wc-registry

get(k)set(k,c)

wc-cvs

tag()revert()

findById(id)findAll()

Solounejemplodecómopuedeadaptarselainterfazderegistro

<wc-cvs registry="[[reg]]"> </wc-cvs>

Sesuponeaccesoalregistro.Elcomponentesoloesun

adaptadorqueproporcionaunainterfazapropiadaparadarserviciosdepáginasblancas

Page 38: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye38

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeLookUp

Serequiereproporcionarunmecanismoparaaccederdemanerasencillaaunúnico registrodecomponentesen todoelespaciodememoriadelaaplicación.

Elcomponentewc-contextproporcionaaccesounitario a un registro de componentes. Paraellou<lizaelhehaviorwc-single.

ContextodeComponentes

El componente fabrica su propia instancia deregistro de manera interna y transparente yofrece serviciodepaginasblancaso amarillassegúnseconfigure.

wc-registry

wc-white

[wc-single]

Elcomponentedecontextoadquierelosmétodosdeaccesoexpuestosporwc-whitedemaneraqueparaelclienteestransparentelaexistenciadeinfraestructurapordetrás

wc-context

wc-a

<wc-context registry="[[white]]"> </wc-context>

Laconfiguracióndelregistrosóloesnecesariahacerlaunavez

wc-context[wc-single]

wc-b

DOM#1 DOM#2

Page 39: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye39

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeLookUp

Serequiereproporcionarunmecanismoparaaccederdemanerasencillaaunacolecciónderegistrosdecomponentesentodoelespaciodememoriadelaaplicación.

Elcomponentewc-context-providerdaaccesoa una colección de contextos diferentesorganizadosenunespaciodenombres.

ProveedordeContexto

El componente se configura indicando lacoleccióndecontextosquedebenserincluidospordefectoenelentorno.

wc-registry

wc-white

wc-context-provider[wc-single]

wc-a

DOM#1

getContext('C1')

[wc-single]wc-context-provider

wc-a

DOM#2

getContext('C1')

Elcomponentedecontextoadquierelosmétodosdeaccesoexpuestosporwc-whitedemaneraqueparaelclienteestransparentelaexistenciadeinfraestructurapordetrás

<wc-context-provider registry="[[w]]"> <wc-rule key="C1" context="[[c1]]"/> <wc-rule key="C1" context="[[c2]]"/> <wc-rule key="C1" context="[[c3]]"/> </wc-context-provider>

Laconfiguracióndelregistrosóloesnecesariahacerlaunavez

Page 40: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye40

PatronesdeComposiciónPatronesdeComposición

III.PatronesdeAdaptación Los patrones de adaptación realizan transformaciones

sobre los componentes para que encajen en el contextoarquitectónicodeuso.

Adaptación

Proceso Restricciones

genera

Componente Componentes

CajaNegraArquitectura

transforma

Componente Componente

{ } Js Ca

jaGrisModelode

Componente

CajaBlancaPlan<llas

crea

Componente Crea<vidaddeldiseñador

Flexibilida

d

+

Complejidad

+

Tiem

pode

Ejecución

Tiem

pode

Diseño

Page 41: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye41

PatronesdeComposiciónPatronesdeComposición

III.PatronesdeAdaptación

Serequiereadaptarunmétododeuncomponenteparaquenouse parámetros en su llamada y así pueda ser invocadoasíncronamentecomouncomandoporotroscomponentes.

El componente wc-comand transforma sucontrato para recibir los parámetros delmétodo como propiedades y genera unmétodo(execute)querealicelainvocación.

OrientaciónaComando

La configuración recibe el componenteobje<vo (target) y elmétodo sobre el que sedeseagenerarelcomando(method).

<wc-command target="#C" method="m"> <wc-rule key="a"/> <wc-rule key="b"/> <wc-rule key="c"/> </wc-command>

SeindicaelcomponenteyelmétodoobjeBvo

LasreglasindicanporordenposicionalenquéatributoHTMLsemapeacadaparámetro

wc-a

p(x,y,z)

c-command

abcexecute()

Laspropiedades(a,b,c)semapeanenlosparámetrosformales(x,y,z)

Elmétodoexecuteinvocaap

Page 42: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye42

PatronesdeComposiciónPatronesdeComposición

III.PatronesdeAdaptación

Se requiere adaptar el contrato de un componente demaneraque pueda ser explotado en el marco de un nuevo contextoarquitectónicodeuso.

Elcomponentewc-adapteradaptasucontratopara crear nuevos métodos de alias sobreaquellosqueexistenenelmismo.

AdaptadordeContrato

El componente se configura indicandoesencialmente el perfil buscado, como unacoleccióndecaracterís<cas

<wc-adapter target="#A"> <wc-rule key="x" as="a"/> <wc-rule key="y" as="b"/> <wc-rule key="z" as="c"/> </wc-adapter>

Lasreglasindicanlalógicadetransformaciónquedebeaplicarse

Eltargethacereferenciaalcomponentesobreelqueseaplicalaadaptación

wc-a

x()y()z()

wc-adapter

a()b()c()

Losmétodos(a,b,c)semapeanenlosmétodosdedesBno(x,y,z)

Page 43: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye43

PatronesdeComposiciónPatronesdeComposición

III.PatronesdeAdaptación

Serequieregenerarunnuevocomponentequeinyectelógicadeintercesión para que se ejecute en algúnmomento durante lainvocacióndelosmétodosdeuncomponente.

Elcomponentewc-proxyseencargaderealizaroperacionesde intercesiónparaqueejecutenoperaciones antes, durante o después de losmétodosdeuncomponente

ProxydeContrato

Elcomponenterecibeeltargetsobreelquesehace la intercesión y el componente quecon<ene el código a inyectar. Las reglas dandetallessobrelainyección.

<wc-proxy target="#A" aspect="#B"> <wc-rule key="x" with="a" before/> <wc-rule key="y" with="b" after/> <wc-rule key="z" with="c" around/> </wc-proxy>

SeindicaelcomponenteobjeBvoyelqueconBenelosaspectosainyectar

Lasreglasindicanquémétodosdelaspectodebenejecutarse(with)cuandoseinvocacadamétododeltarget(key)

Seindicacuandoseejecutacadadecoración.Antes(before),durante

(around)odespués(aier)

wc-a

x()y()z()

wc-proxy

x()y()z() a()

b()c()

Lasclaves(key)puedenusarexpresionesregularespara

referirsubconjuntosdepropiedades

Entrelainvocacióndecadamétododeproxyyelmétodooriginalseinterponeelcódigo

dedecoración(a,b,c)

Wc-b

Page 44: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye44

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeLookUp

Serequierealterarelcontratodeuncomponentepormediodelaadquisicióndinámicadenuevascaracterís<casdefinidasenloscontratosdeotroscomponentes.

El componente wc-mix da respuesta a estanecesidad de manera completamentedeclara<va.

MixindeContratos

El componente recibe en base a reglas deconfiguración cada uno de los componentesquehaymezclar.

<wc-mix target="#A" policy="overide"> <wc-rule with="#C1"/> <wc-rule with="#C2"/> <wc-rule with="#C3"/> </wc-mix>

SeindicaelcomponenteobjeBvoyelqueconBenelosaspectosainyectar

LaspolíBcasindicancómoprocedercuandoexistenproblemasdecolisióndeclaves

wc-mixin

wc-c1 Wc-c2 wc-c3

uv

st

xy

wc-a

st

uv

xy

Page 45: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye45

PatronesdeComposiciónPatronesdeComposición

IV.PatronesdeEnlace Los patrones de enlace se encuentran estrechamente

condicionados con la forma de comunicación quepretendamosestablecer.

Enlace

Eventos

DataBinding

Mensajes

e B

A

q

B A

p

LacomposiciónaquíconsisteenregistraraAcomoescuchador

deloseventosdeBpoequeemiteB

EnlaceporEventos

DadoqueBBenepermisoparaescribirenx,lacomposiciónaquíconsisteenregistraraAcomointeresadoenloscambiosdex

EnlaceporDatos

LacomposiciónenestecasoenlazaelcomportamientodeAyBinvocandoamdesden

EnlaceporMensajes

{{x}}

AB

Page 46: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye46

PatronesdeComposiciónPatronesdeComposición

IV.PatronesdeEnlace

Serequiererealizarunenlacecomposi<voporeventosparaqueun componente responda reac<vamente ante cierto <po deeventosemi<doporotrocomponente.

Elcomponenteobje<vodeberegistrarsecomoescuchador de los eventos de cierto <poemi<dosporelcomponenteemisor.

EnlacePorEventos

Lalógicadecomposiciónencapsulaunregistrode eventos convencional u<lizando losmecanismosdelaWeb.

e B

A

ElcomponenteAseregistracomoescuchadordeloseventosdeBpoeemiBdosporB

SeasumequeAhasidolocalizadoporBportécnicasexploratoriasodelookup.

function bind (self) {

return {

eventBind : function (binding) {

var {target, on} = binding;

target.addEventListener (

on, self.execute);

} ... };

}

Porconvenio,elmanejadoresunmétodo(execute)queresideelclientedondeseimplementatodalalógicareacBva

Page 47: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye47

PatronesdeComposiciónPatronesdeComposición

IV.PatronesdeEnlace

Serequiererealizarunenlacecomposi<vopordatosparaqueuncomponente responda actualizando una de sus propiedades alvaloradquiridoporotrapropiedadenotrocomponente.

Elcomponenteobje<vodeberegistrarsecomoescuchador de cambios de propiedadesmientras que el emisor debe configurar supropiedadno<fyatrue.

EnlacePorDatos

La lógica de composición consisteahora enescuchar eventos de cambio y procederactualizandounadesuspropiedades.

x-changed B

A

ElcomponenteAseregistracomoescuchadordeloseventosdeBpox-changedemiBdosporB

Loscambiossobrelapropiedadxemiteneventosdelaformax-changed

function bind (self) {

return {

dataBind : function (binding) {

var {target, from, to} = binding;

var on = from + '-changed';

target.addEventListener (on,

function (e, ctx) {

self[to] = ctx.value;

}

);

} ... }; }

LareacciónconsisteenactualizarlavariabledesBnocuandocambialadeorigen

Page 48: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye48

PatronesdeComposiciónPatronesdeComposición

IV.PatronesdeEnlace

Se requiere realizar un enlace composi<vo por mensajes paraque la llama a unmétodo de un componente desencadene lainvocacióndeotrométododelcomponenteobje<vo.

El componente obje<vo debe registrar unaintercesiónfuncionalsobreelmétododeotrocomponenteparaqueenalgúnpuntoinvoqueaunodesusmétodos.

EnlacePorMensajes

Existen 3 <pos de estrategias de intercesiónsobre unmétodo. Before, aoer y aroundquellaman, respec<vamente, al obje<vo antes,después y durante la ejecución de dichométodo.

ElmétodoqdeAenbeforeesnormal,enaierdebeesperarunparámetrocorrespondientealresultado.Enaround,unocorrespondientealapropiafunciónp

AlinvocaralmétodopdeBsepretendequeseejecuteelmétodoqdeA.EstaintercesiónresultatransparenteparaB

q

B A

p

function bind (self) {

return {

messageBind : function (binding) {

var {target, on, to, when} = binding;

var fn = self[to];

target[on] = function (...args) {

if (when === BEFORE) fn.apply(self, args);

var r = target[on].apply (target, args);

if (when === AFTER) fn.apply(self. [...args, r]);

} } } }

Detallesen'MetaprogramaciónenJavaScript'.JSDay2015

Page 49: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye49

PatronesdeComposiciónPatronesdeComposición

IV.PatronesdeEnlace

Serequiereproporcionarunmecanismodeclara<voparadefinirtodos los<posdeenlacescomposi<vosquepresentaunenlaceconsuvecindad.

El componente wc-bind permite cubrir estanecesidad ar<culando los 3 <pos de enlacecomposi<voanteriores.

EnlaceExterno

Las reglas de configuración determinan quéenlaces hay que hacer con cada componentede la vecindad. (for) marca el componenteobje<vo.

<wc-bind for="A"> <wc-rule event with="B" on="e"/> <wc-rule data with="C" from="x" to="y"/> <wc-rule message with="D" on="q" to="f" before/> <wc-rule message with="D" on="q" to="g" after/> </wc-bind>

fg

D

A

Pq

B Ce

x = {{v}}

y = [[v]]

Bindingporeventos

Bindingpormensajes

Bindingpordatos

LasreglasdeconfiguraciónprescribetodalalógicadeenlacecomposiBvoqueesnecesarioarBcular

Page 50: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye50

PatronesdeComposiciónPatronesdeComposición

IV.PatronesdeEnlace

Se requiere proporcionar un mecanismo para permi<r a loscomponentes definir sus propios enlaces composi<vos con loscomponentesdesuvecindad.

El behavior wc-composable proporcionamétodosdebindingparaqueestospuedanserinvocados desde la lógica de composición delcomponente.

EnlaceInterno

Las capacidades de binding del behabior seusan al principio en el ciclo de vida. Tambiénsuelen usarse en conjunción con el behabiorconfigurabledentrodelmétodoconfig.

[wc-binding]A

B e

ready: function () {

this.bind ({ type : 'event', ref : B on : 'e' });

}

[wc-binding][wc-configurable]

ABe

config: function (rules) {

rules.forEach (rule => {

this.bind (binding (rule)); });

}

Behaviors ['wc-composable'] = (function () {

var Binds = {

event : function eventBind () {...},

data : function dataBind () {...},

message : function messageBind () {...}

};

return {

bind : function (binding) {

Binds[binding.type] (binding);

}

};

})();

Page 51: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye51

PatronesdeComposiciónPatronesdeComposición

IV.PatronesdeEnlace

Serequiereproporcionarunmecanismosencilloparaespecificarsecuencias de composición entre componentes de formacompletamentedeclara<va

El componente wc-chain proporciona unamanera sencilla de crear cadenas decomposicióndeformadeclara<va.

CadenadeComposición

Se asume que la lógica de composición porpares es siempre la misma y puedefactorizarseenunwc-bindexterno.

<wc-chain binder="#bnd"> <wc-x/> <wc-y/> <wc-z/> </wc-chain > <wc-bind id="bnd"> <wc-rule event on="e"/> <wc-rule data from="x" to="y"/> <wc-rule message on="f" to="g" before/> </wc-bind>

wc-a

wc-b

wc-cElcomponenteiterasobreloselementosdelacadenaylosenlazasecuencialmentede

acuerdoalalógicadeenlaceenelbind

Lalógicadecomposiciónconsisteenestecasoenunenlaceporeventoe,otropordatos(x,y)yunopormensajeenbefore(f,g)

LógicadecomposicióncomúnparaseraplicadaiteraBvamenteporcadaparensecuencia

Losparámetros(for)y(with)dewc-bindsoninyectadosporwc-chain

Page 52: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye52

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización Los patrones de contextualización permiten interpretar

cadacolaboraciónentrecomponentesdentrodelcontextodeusoadecuado.

Contextualización

Configuración

TargeRng

LaLógicadeconfiguraciónprescribecomoseadquiereelcomponenteuna

parametrizaciónprecisaparaelcontextodeuso

Configuración

EltargeBngrefierealaconfiguracióndelcontextoarquitectónicosobreelcuallaoperaBvadelcomponentedebetenerefecto

TargeRng

Page 53: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye53

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.Configuración Enrelacióna lasestrategiadeconfiguraciónsedis<nguen

tres niveles de madurez. A con<nuación exponemos loscriteriosquedefinencadanivel.

ConfiguraciónM.Componente Configuración Inyección

NivelII.

Centralización

Confi

guración

NivelIII.

Inyección

Automá<

ca

ModelodeComponenteconvencional

ConfiguraciónexplícitaenHTMLporatributosyLightDOM

Alinstanciarelcomponenteseincluyelaconfiguración

NivelI.

Confi

guración

Manualproperties

methods

HTML attributes Light DOM

Cascade Configurable Rules Registrable Register

Context ContextProvider Config

Factory

Injector Injectable

Configuracióncentralizadaenartefactos

externos

ConstrucciónautomáBcaa

travésdeinyector

Construcciónexplícitaatravésdeinyectorbajo

demandadelcliente

Page 54: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye54

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.Configuración

Serequierehomogenizarelprocesodeconfiguraciónestá<cadelos componentes y facilitar su procesamiento de formasemiautomá<ca.

El componentewc-rule cubrir lasnecesidadesde homogenización en la configuración. Elbehaviorwc-configurableasisteenelproceso.

ConfiguraciónEstáRcaPorReglas

Cualquier componente con lógica deconfiguración compleja usa reglas pararealizarladeformaasis<da.

NivelI

<wc-x> <wc-rule key="users" source="#ds1"/> <wc-rule key="prods" source="#ds2"/> ... </wc-x>

Estenoesmásqueunejemplodecomponenteconconfiguraciónporreglas

Losatributosdecadareglasongenéricos.Noestásprefijadoscomopropiedades.DeestamaneralareglaesunartefactoreuBlizableymuyflexible

Behaviors = Behaviors || {};

Behaviors ['wc-configurable'] = {

ready : function () {

var rules = getRules ();

this.config (rules);

}

};

config: function (rules) {

// process config

}

});

[wc-configurable]

Page 55: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye55

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.Configuración

Se requiere realizar un proceso de configuración por reglas demaneraquesiseproducencambiosenlaconfiguración,estossepropaguenparaactualizarelcomponente.

El componente wc-rule cubrir ahora lasnecesidades de reconfiguración dinámica alpropagarporeventosloscambios.

ConfiguraciónDinámicaPorReglas

Cualquier componente con lógica deconfiguración compleja usa reglas pararealizarladeformaasis<da.

NivelI

Behaviors = Behaviors || {};

Behaviors ['wc-reconfigurable'] = {

listeners: { change: onChange },

onChange: function (e) {

var rules = getRules (e);

this.config (rules);

}

};

config: function (rules) {

// process config

}

});

[wc-configurable]

Rules

e

<wc-x> <wc-rule key="users" source="#ds1"/> <wc-rule key="prods" source="[[ds2]]"/> ... </wc-x>

Estenoesmásqueunejemplodecomponenteconconfiguraciónporreglas

Cadacomponenteregladisparauneventodecambiocadavezqueseproduceuncambioenlosatributos

Page 56: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye56

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.Configuración

Serequierequeelprocesodeconfiguraciónporreglaspuedaserreinterpretadoenelmarcodeotrocomponente recibidocomoparámetrodeconfiguración.

Elbehaviorwc-contextualizableañadeademásun atributo de contexto que permite reinter-pretarlaconfiguracióndelcomponente.

ContextualizacióndeReglas

Elbehaviorincorporaalcomponenteunnuevoatributo que indica el nuevo contexto dondedebeinterpretarselaconfiguración.

NivelI

Lalógicadeconfiguraciónseinterpretaahoraenelmarcodeotrocontexto

<wc-x context="[[ctx]]"> <wc-rule key="users" source="#ds1"/> <wc-rule key="prods" source="[ds2]"/> ... </wc-x>

Losvaloresentrecorchetes[]soninterpretadoscomopropiedadesdentrodelnuevocontexto

Behaviors ['wc-contextualizable'] = {

properties : {

context : Object

},

ready : function () {

var rules = getRules ();

this.config (

this.context (rules)

);

},

context: function (rule) {

// Contextualize Rule

} };

Page 57: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye57

<wc-X config="{{cx}}">

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.Configuración

La lógica de configuración de los componentes internos a unesquema de fuerte anidamiento DOM reside en el padre. Serequiereunmecanismodeconfiguraciónsencillo.

El componente wc-cascade permite arrastrarla información de configuración en cascadaaplicándolaacadapaso.

ConfiguraciónenCascada

Serecogeunaconfiguracióndeentrada(in),seaplicaenelcomponenteencursoygeneraunaconfiguracióndesalida (out)parael siguientecomponenteencascada.

NivelI

</wc-X>

LightDOM ShadowDOM

</wc-Y>

<wc-Y config="{{cy}}">

shadowRoot

LightDOM ShadowDOM

shadowRoot

<wc-cascade in="{{cx}}" out="{{cy}}"/>

<wc-cascade in="{{cx}}" out="{{cy}}"> <wc-rule key="x" to="a" out/> <wc-rule key="y" to="b" out/> <wc-rule key="z" to="c"/> </wc-cascade>

(key)eselnombredeunapropiedadencx.(to)indicaenquepropiedaddelcomponenteseinyecta.(out)determinasielvalornodebecopiarseency

Serecogelaconfiguracióncx,seprocesaysepasaawc-yelrestocy

Page 58: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye58

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.Configuración

Se requiere proporcionar un mecanismo para que loscomponentesllevenacabosuprocesoderegistroenelcontextodeconfiguracióndeformaautónoma.

El behavior wc-registrable proporcionafacilidadesderegistroautomá<coquequedanvinculadasalciclodevidadelcomponente.

RegistroInterno

El behavior se encarga de llevar a cabo elproceso de registro en el contexto deconfiguracióndeformaautomá<ca.

NivelI

ShadowDOM

<wc-a>

</wc-a>

<wc-b>

</wc-b>

wc-context

wc-a

[wc-registrable]

Behaviors = Behaviors || {};

Behaviors ['wc-registrable'] = {

ready : function () {

var props = getProperties (this);

this.register (props);

},

register : function () {

// register props

}

};

wc-aseregistraautónomamenteporqueesregistrable

wc-besuncomponentenoregistrable

Page 59: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye59

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.Configuración

Se requiere proporcionar un mecanismo para que un agenteexterno lleve a cabo las tareas de registro en el contexto deconfiguracióndeformaautónoma.

El componente wc-register permite llevar acabo las tareas de registro automá<co conasistenciadetécnicasexploratorias.

RegistroExterno

Internamente, el registro u<liza un wc-scoutpor lo que su lógica de configuración, debeincluirunhandle.

NivelI

ShadowDOM

<wc-a register>

</wc-a>

<wc-b register>

</wc-b>

<wc-c>

</wc-c>

wc-register

wc-context

wc-awc-b

<wc-register target="#container" ref="[register]"> </wc-register>

Porconvenienciaelnombredelatributohandlesellama(target)enestecomponente

SóloloscomponenteseBquetadosconelrol

'register'sonregistrados

Page 60: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye60

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.Configuración

Se requiere un mecanismo para encapsular la lógica deconfiguracióncorrespondienteauncomponentedemaneraquepuedaseralmacenadayaplicadaposteriormente.

El componente wc-config permite encapsularlógica de configuración y persis<rla en uncontextodeconfiguracióndeterminado.

EncapsulacióndelaConfiguración

El componente recoge la configuraciónexplícitaquenecesitauncomponenteparasergenerado.

NivelII

<wc-config name="a" type="A"> <wc-rule key="x" value="[[r]]"/> <wc-rule key="y" value="[[s]]"/> <wc-rule key="z" value="3"/> <wc-rule key="b" type="B" prototype/> <wc-rule key="c" type="C" single/> </wc-config>

NombreyBpodelcomponenteaconstruir

Configuracióndepropiedadesenlaconstrucción.PuedenservaloresconcretosoBposdeartefactosaconstruir

wc-config

x,y,zb,c

type='A'

ElcontextoBenecomomisión,enestenivel,almacenarlas

configuracionesdecomponentesparaseruBlizadasenprocesosde

inyecciónposterior

wc-context Elcomponenteesunalmacéndeinformacióndeconfiguración

Page 61: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye61

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.Configuración

Se requiere un mecanismo para construir bajo demanda lasinstancias de componentes que van a operar dentro delcontenidoenlasobradeuncomponentepadre.

Elcomponentewc-factorydarespuestaaestanecesidad por medio del uso de lasconfiguracionesenelcontexto.

InyecciónBajoDemanda

Elcomponentefactoríaseconfiguraindicandosobre que contexto DOM requiere operar.Consultetarge<ngmásadelante.

NivelII

<wc-factory target="#here"> </wc-factory>

Dentrodeesteespacioseinstancianloscomponentesqueesnecesariocreardentrodelcontenidoenlasombra

Elcomponentepadreesresponsabledecrear

lasexplícitamente

wc-factorywc-confi

ga

wc-context

create(k)

ShadowDOMwc-container

create('a')

<wc-a>

</wc-a>

Lafactoríaesunsinglequeserecuperaporlookup

Page 62: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye62

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.Configuración

Se requiere proporcionar un mecanismo para que loscomponentes lleven a cabo su proceso de inyección dedependenciasdeformaautónoma.

El behavior wc-injectable proporcionafacilidades de configuración automá<ca quequedanvinculadasalciclodevida.

InyecciónInterna

El behavior se encarga de llevar a cabo elproceso de configuración del componente demaneraautomá<ca.

NivelIII

ShadowDOM

<wc-a>

</wc-a>

<wc-b>

</wc-b>

wc-context

[wc-injectable]

Behaviors = Behaviors || {};

Behaviors ['wc-injectable'] = {

ready : function () {

this.config (ctx);

},

config: function (ctx) {

var cfg = ctx.get (this.is);

// inject dependencies

// using wc-context

}

};

wc-aseconfiguraautónomamenteporqueesinjectable

wc-besuncomponentenoinjectable

Page 63: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye63

PatronesdeComposiciónPatronesdeComposición

II.PatronesdeLocalización.TécnicasdeLookUp

Se requiere proporcionar un mecanismo para que un agenteexternolleveacabolastareasdeinyeccióndedependenciasdeformaautónoma.

El componente wc-injector llevar a cabo lastareas de configuración automá<co conasistenciadetécnicasexploratorias.

InyecciónExterna

Internamente, el registro u<liza un wc-scoutpor lo que su lógica de configuración, debeincluirunhandle.

NivelIII

ShadowDOM

<wc-a inject>

</wc-a> <wc-b>

</wc-b>

wc-injector

wc-context <wc-register target="#container" ref="[register]"> </wc-register>

Porconvenienciaelnombredelatributohandlesellama(target)enestecomponente

SóloloscomponenteseBquetadosconelrol

'register'sonregistrados

wc-configa

wc-a?

wc-configa

Page 64: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye64

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.TargeRng Lospatronesdetarge<ngpermitenespecificarelcontexto

arquitectónico sobre el cual la opera<vadel componentedebetenerefecto.

TargeRng DOM#1

HostDOM

<wc-me>

</wc-me>

LightDOM ShadowDOM

<wc-container>

</wc-container>

shadowRoot

DOM#2

wc-context

distribución

templa<ng

invasión

trasvase

Page 65: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye65

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.TargeRng

Se requiereproporcionar unmecanismoparaque el contenidoHTML generado por un componente pueda ser ubicado en untargetdiferente.

El behavior targatable incorpora un atributotarget que se u<liza para capturar el nuevodes<nodeloscontenidosgenerados.

Targatable

Laconfiguracióndeeste<podecomponentesrequiere especificar el des<no de loscontenidosenel(target).

<wc-x target="#container"> </wc-x>

Elbehaviorincorporaalcomponenteelatributo(target)

Esteesuncomponentegenéricoquehaceusodelcomportamiento

targatable

Behaviors ['wc-targatable'] = {

properties : {

target: Object

},

ready : function () {

this.render (target);

}, };

Polymer ({

is : 'wc-x',

behaviors : [

Behaviors ['wc-targatable']

],

render: function (target) {

// Render

}

});

Page 66: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye66

PatronesdeComposiciónPatronesdeComposición

V.PatronesdeContextualización.TargeRng

Se requiere adaptar el contrato de un componente demaneraquesuusooperenosobreelpropiocomponentesinosobreotrocomponentedes<natario.

Elcomponentewc-contextulizerseencargaderealizar esta opera<va de recontextualizaciónparaqueoperesobreotrocomponente

ContextualizadordeContrato

El componente se configura indicando elcomponente original (target) y el que operacomonuevodes<no(context).

<wc-contextualizer target="#A" context="#B" keys="x y z"> </wc-contextualizer>

(keys)indicalosmétodosquedebencontextualizarse.CuandoseomiteesteatributoseenBendequedebenrecontextualizarsetodoslosmétodos

wc-contextualizer

wc-a

wc-a

Contextofunction (target, ctx) { Object.keys(target) .filter (isFunction) .forEach (fn => fn.bind (ctx); ); }

Page 67: Arquitecturas de Componentes Web. Patrones de Composición

JavierVélezReyes@javiervelezreye

[email protected]

3LaComposiciónenlaPrácCca

§  ComposiciónDirectaporEventos§  ComposiciónIndirectaporDatos§  ComposicióndeFlujosdeEventos&Datos

LaCom

posición

enlaPrácCca

Patron

esdeCo

mpo

sición

Page 68: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye68

LaComposiciónEnLaPrác<caPatronesdeComposición

I.ComposiciónDirectaporEventos<wc-button id="btn"> </wc-button>

Click

wc-buron#btn[wc-composable]

wc-color

<wc-color target="#btn" on="tap"> </wc-color>

on-tap

§  2componentesindependientes§  Unodeellosescomposable§  Configurandosusatributostarget&onseconsiguelaopera<va

<wc-color target="#btn" on="tap"> </wc-color>

execute: function () { this.style.background = 'CCC'; }

A.ComposiciónInterna

Page 69: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye69

LaComposiciónEnLaPrác<caPatronesdeComposición

I.ComposiciónDirectaporEventos<wc-button id="btn"> </wc-button>

Click

wc-buron#btnwc-color

on-tap

<wc-color> </wc-color>

execute: function () { this.style.background = 'CCC'; }

wc-bind

§  2componentesindependientes§  Unodeellosescomposable§  Configurandoelbinderseconsiguelaopera<va

<wc-bind for="wc-color"> <wc-rule event with="#btn" on="tap"/> </wc-bind>

B.ComposiciónExterna

Page 70: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye70

LaComposiciónEnLaPrác<caPatronesdeComposición

I.ComposiciónDirectaporEventos<wc-button id="A"> </wc-button>

Click

wc-buron#A

on-tap

<wc-color> </wc-color>

execute: function () { this.style.background = 'CCC'; }

<wc-bind for="wc-color"> <wc-rule event with="#A" on="tap"/> <wc-rule event with="#B" on="tap"/> </wc-bind>

wc-bind

§  Varioscomponentesindependientes§  Unodeellosescomposable§  Configurandoelbinderseconsiguelaopera<va

<wc-button id="B"> </wc-button>

Click

wc-buron#B

on-tap

C.ComposiciónMúlRple

wc-color

Page 71: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye71

LaComposiciónEnLaPrác<caPatronesdeComposición

I.ComposiciónDirectaporEventos<wc-button id="btn"> </wc-button>

Click

wc-buron#btn

on-tap

<wc-video id="#v"> </wc-video>

execute: function () { (#v).play (); }

<wc-adapter target="#v"> <wc-rule key="play" as="execute"/> </wc-adapter>

wc-bind

§  2componentesindependientes§  Ningunodeellosescomposable§  Configurandoelbinderseconsiguelaopera<va

wc-adapter<wc-bind for="wc-color"> <wc-rule event with="#btn" on="tap"/> </wc-bind>

D.ComposiciónAdaptaRva

wc-video#v

Page 72: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye72

LaComposiciónEnLaPrác<caPatronesdeComposición

II.ComposiciónIndirectaporDatos <wc-i18n register> </wc-i18n>

<wc-login> </wc-login>

<wc-bind for="wc-color"> <wc-rule data with="i18n" from="language" to="language"/> </wc-bind>

DOM#2

language: 'es' onLanguage: function (e) {

this.i18n (getResource(

this.language

)); }

wc-factory

wc-context

DOM#1

wc-i18n

{{i18n.login}}

wc-login

{{i18n.pwd}}

{{i18n.ok}}

[wc-i18n-able]

[wc-i18nable]:

wc-bind

{{language}} crea

wc-i18nregister

wc-register

set(i18n)

get(i18n)

§  Componentesconunperfili18n-able§  Composiciónindirectaatravésdememoria§  Bindingdedatos

DOM#1

DOM#2

<wc-register> </wc-register>

<wc-factory> </wc-factory>

<wc-i18n> </wc-18n>

A.InyecciónBajoDemandaData

Page 73: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye73

LaComposiciónEnLaPrác<caPatronesdeComposición

II.ComposiciónIndirectaporDatos <wc-i18n register> </wc-i18n>

<wc-login inject> </wc-login>

DOM#2

language: i18n ready: function () { (#bnd).bind (...) } onLanguage: function (e) { ... }

wc-injector

wc-context

DOM#1

[wc-login]:

wc-i18n

{{i18n.login}}

wc-logininject

{{i18n.pwd}}

{{i18n.ok}} wc-bind

{{language}}

Injecti18n

wc-i18nregister

wc-register

set(i18n)

get(i18n)

§  Componentesconunperfili18n-able§  Composiciónindirectaatravésdememoria§  Bindingdedatos

DOM#1

DOM#2

<wc-register> </wc-register>

B.InyecciónAutomáRca

<wc-injector> </wc-injector>

Data

Page 74: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye74

LaComposiciónEnLaPrác<caPatronesdeComposición

III.ComposicióndeFlujosdeEventos&Datos

§  Unacoleccióndecomponentescondis<ntaresponsabilidad§  Seencadenancomposi<vamenteporeventosparaoperar§  Seconectanalcomponentetwirerporeventos

wc-twirer#V

page-up

page-down

wc-event-client#cl

wc-pager

wc-data-source

wc-command-provider

wc-rest

A.FlujoEntrante

command

command

page-uppage-down

<wc-chain binder="#in"> <wc-even-client id="cl".../> <wc-pager.../> <wc-data-source.../> </wc-chain>

get

<wc-twitter id="V"> </wc-twitter>

<wc-bind for="#V"> <wc-rule event with="#cl" on="page-up"/> <wc-rule event with="#cl" on="page-down"/> </wc-bind>

<wc-command-provider> </wc-command-provider> <wc-rest> </wc-rest>

getCommand

<wc-bind id="in"> <wc-rule event on="command"/> </wc-bind>

Page 75: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye75

LaComposiciónEnLaPrác<caPatronesdeComposición

III.ComposicióndeFlujosdeEventos&Datos

§  Larespuestadelafuentededatosesasíncrona§  Losresultadosseemitenporeventosdata§  Elpuertodedatosrecogelosdatosdeeventos§  Seconectaelpuertodedatosconlapropiedad{{tweets}}de#V

wc-twirer#V

page-up

page-down

wc-rest#ds

B.FlujoSaliente

<wc-twitter id="V"> </wc-twitter> ...

data

{{tweets}}tweets

<wc-bind for="#V"> <wc-rule data with="#dp" from="data" to="tweets"/> </wc-bind>

wc-data-port#dp

data

<wc-bind for="#dp"> <wc-rule event with="#ds" on="data"/> </wc-bind>

<wc-data-port id="#dp"> ... </wc-data-port>

Page 76: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye76

PreguntasPatronesdeComposición

www.javiervelezreyes.com

PatronesdeComposición

ArquitecturasOrientadasaComponentesWeb

Page 77: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye77

ReferenciasPatronesdeAccesoaDatos

Referencias

LaWebOrientadaaComponentes

Fecha Noviembrede2015Lugar CodeMo<onPáginas 57Ref hrps://goo.gl/mCxm3w

ComponentesWeb·ArquitecturasSooware·Frontend·JavaScript·Composición · Encapsulación · Reu<lización · Buenas Prác<cas ·PrincipiosdeDiseño·Errorescomunes

PrincipiosdeDiseñoenComponentesWeb

Fecha Marzode2015Lugar PolymerMadridPáginas 170Ref hrps://goo.gl/t0GpVS

Programación Orientada a Componentes · Principios de Diseño ·Buenas Prác<cas · Recomendaciones de Diseño y Desarrollo ·TécnicasdeProgramacióndeComponentesWeb·Polymer

Page 78: Arquitecturas de Componentes Web. Patrones de Composición

@javiervelezreye78

ReferenciasPatronesdeAccesoaDatos

Referencias

ArquitecturasparalaReuRlizaciónenJavaScript

Fecha Abrilde2016Lugar JSDayPáginas 43Ref hrps://goo.gl/i9pd03

Programación Orientada a Componentes · Componentes ·Reu<lización·Programación·JavaScript·ModelosArquitectónicos·Metaprogramación·Adaptaciónarquitectónica

MetaprogramaciónComposiRvaenJavaScript

Fecha Mayode2015Lugar JSDayPáginas 84Ref hrps://goo.gl/wLllU2

Metaprogramación · Programación adapta<va · Programaciónorientada a Componentes · JavaScript · Adaptación · AlineamientoArquitectónico·técnicasdemetaprogramación·patronesdediseño

Page 79: Arquitecturas de Componentes Web. Patrones de Composición

JavierVélezReyes@javiervelezreye

[email protected]

PatronesdeComposición

ArquitecturasOrientadasaComponentesWeb

Noviembre2016