Arquitectura de Componentes Web. Patrones de Acceso a Datos

75
Javier Vélez Reyes @javiervelezreye [email protected] Patrones de Acceso a Datos Arquitecturas Orientadas a Componentes Web Octubre 2016

Transcript of Arquitectura de Componentes Web. Patrones de Acceso a Datos

Page 1: Arquitectura de Componentes Web. Patrones de Acceso a Datos

JavierVélezReyes@javiervelezreye

[email protected]

PatronesdeAccesoaDatos

ArquitecturasOrientadasaComponentesWeb

Octubre2016

Page 2: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye2

AutorPatronesdeAccesoaDatos

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: Arquitectura de Componentes Web. Patrones de Acceso a Datos

JavierVélezReyes@javiervelezreye

[email protected]

1Introducción§  ArquitecturadeReferenciaparaComponentesWeb§  PlanoArquitectónico,PlanodeDiseño&PlanoTecnológico§  ArquitecturadelSubsistemadeDatos

Introd

ucción

Patron

esdeAc

cesoaDatos

Page 4: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye4

IntroducciónPatronesdeAccesoaDatos

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

La construcción de soluciones orientadas acomponentes Web es inherentemente máscomplejaqueotrasaproximacionescompe<<vas.

Page 5: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye5

IntroducciónPatronesdeAccesoaDatos

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

Coop

era<

on

Coordina<on

Comunica<on

Composi<on

UniversalApp

s

Performance Security

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

Layers

No<

fica<

on

UserBased

Channel

View

ers

Page 6: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye6

Arquitectos

IntroducciónPatronesdeAccesoaDatos

II.LaArquitecturadeReferenciaenelParadigmadeComponentesWebPlanoArquitectónicoElmodeloarquitectónicoexponeexplícitamentetodos losespaciosdeproblemaquepuedenaparecerenelmarcodesolucionesorientadasacomponentesweb.

Principios

Mecanismos

ObjeSvos

Vis

Evo

Hom

Ada

Dom

Cmp

Enc

Std

Tmp

Evt

Her

DBin

cic

Data

Session

Offline

Integra0

on

RoleBased

ChannelBased

ContextBased

View

Con

trol

Paging

Rou0

ng

Conten

t

Containe

rs

Interac0on

Coop

era0

on

Coordina0on

Comunica0on

Composi0on

UniversalApp

s

Performance Security

Monitoring Authe.&Autho.Op0miza0on WC&ResourceManagement

Layers

No0

fica0

on

UserBased

Channel

View

ers

Page 7: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye7

Data

Session

Offline

Integra0

on

RoleBased

ChannelBased

ContextBased

View

Con

trol

Paging

Rou0

ng

Conten

t

Containe

rs

Interac0on

Coop

era0

on

Coordina0on

Comunica0on

Composi0on

UniversalApp

s

Performance Security

Monitoring Authe.&Autho.Op0miza0on WC&ResourceManagement

Layers

No0

fica0

on

UserBased

Channel

View

ers

Patrones

Diseñadores

IntroducciónPatronesdeAccesoaDatos

PlanodeDiseñoEldiseñodirigidoporpatronesesunaformasistemá<cadeexplorar esos espacios para encontrar soluciones deeficacia probada a problemas recurrentes para contextosreales.

Principios

Mecanismos

Arquitectos

ObjeSvos

Vis

Evo

Hom

Ada

Dom

Cmp

Enc

Std

Tmp

Evt

Her

DBin

cic

II.LaArquitecturadeReferenciaenelParadigmadeComponentesWeb

Page 8: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye8

Data

Session

Offline

Integra0

on

RoleBased

ChannelBased

ContextBased

View

Con

trol

Paging

Rou0

ng

Conten

t

Containe

rs

Interac0on

Coop

era0

on

Coordina0on

Comunica0on

Composi0on

UniversalApp

s

Performance Security

Monitoring Authe.&Autho.Op0miza0on WC&ResourceManagement

Layers

No0

fica0

on

UserBased

Channel

View

ers

PlanoTecnológico

Programadores

IntroducciónPatronesdeAccesoaDatos

PlanoTecnológicoLa arquitectura proporciona componentes comomaterializacióndepatrones.Elcontextoarquitectónicofijaelcontratodecadacomponente.

Principios

Mecanismos

Patrones

Arquitectos

ObjeSvos

Vis

Evo

Hom

Ada

Dom

Cmp

Enc

Std

Tmp

Evt

Her

DBin

cic

Diseñadores

II.LaArquitecturadeReferenciaenelParadigmadeComponentesWeb

Page 9: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye9

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatosElSubsistemadedatosseposicionadentrode lacapadeintegración.Engeneralloscomponentesoperancondatosaccedidosdesdeestacapa.

Data

Session

Offline

Integra<

on

Channel

Access

RoleBased

ChannelBased

ContextBased

View

Con

trol

Paging

Rou<

ng

Conten

t

Containe

rs

Interac<on

Coop

era<

on

Coordina<on

Comunica<on

Composi<on

UniversalApp

s

Performance Security

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

Layers

No<

fica<

on

UserBased

View

ers

Page 10: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye10

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatosDentro de la capa de integración se dis<nguen 4subsistemas que <enen responsabilidades concomitantesconlages<óndedatosdefuentesexternas.

Data

Session

Offline

Integra<

on

Channel

CómosegesGonaeldiferimientodeinformacióndeestadoentresesionesdetrabajo

ControldeSesión

CómosegesGonaelaccesoafuentesdedatosylosflujosdeinformaciónasociados

AccesoaDatos

CómosegesGonalainformaciónextraídadelcanaluGlizado(móvil,broser,etc.)

ControldeCanal

CómosegesGonaelaccesoaadatosencontextosdeusoinestablesocondesconexión

AccesoOffline

Page 11: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye11

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatosPodemos caracterizar el subsistema de acceso a datos apar<r de 3 propiedades fundamentales, su esenciaasíncrona,sucardinalidadysudireccionalidad.

Asincronía

Cardinalidad

1:1

N:1

1:N

N:M

Direccionalidad

Entrante

Saliente

Page 12: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye12

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatos

SubsistemadeDatos

EspacioAsíncronoLas caracterís<cas de los elementos fronterizos incluidosenelsubsistemadedatoshacequeéstaoperedeacuerdoaunmodelocompletamenteasíncrono.

Desde la perspecGva declaraGva, elinteracción con el subsistema dedatos se hace de manera asíncronaya sea a través de eventos o pormediodedata-binding

Interacciónasíncrona

Pese a que las fuentes operan enmodelos síncrono y asíncrono (segúnGpo), suaccesodesde front,a travésdeAJAXessiempreasíncrono

Accesoasíncrono

Async

Page 13: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye13

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatosEspacioAsíncronoLas caracterís<cas de los elementos fronterizos incluidosenelsubsistemadeaccesoadatoshacequeestaoperedeacuerdoaunmodelocompletamenteasíncrono.

Async

ArquitecturaPipes&Filters

Debe establecerse una arquitectura pipes& filtersque permite operar entre el acceso y la fuente atravésdeunacadenadetransformaciones

RestricciónArquitectónica#1.Pipes&Filters

SubsistemadeDatos

Page 14: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye14

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatosEspacioAsíncronoLas caracterís<cas de los elementos fronterizos incluidosenelsubsistemadeaccesoadatoshacequeestaoperedeacuerdoaunmodelocompletamenteasíncrono.

Asynce e e e e

ArquitecturaDirigidaporEventos

LasrelacionescomposiGvasseestablecendeacuerdoaun modelo de eventos. Cada componente operareacGvamenteenfuncióndeloseventosquelellegan

RestricciónArquitectónica#2.ArquitecturaEDA

SubsistemadeDatos

Page 15: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye15

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatosEspacioAsíncronoLas caracterís<cas de los elementos fronterizos incluidosenelsubsistemadeaccesoadatoshacequeestaoperedeacuerdoaunmodelocompletamenteasíncrono.

Asynce e e e e

ContratoReacSvoHomogéneo

incoming outgoing

calleventcommand

data

execute(e)

LoscomponentesdebencomparGrunmismocontrato que les permita operar dentro deunaarquitecturademensajes

RestricciónArquitectónica#3.ContratoReacSvoHomogéneo

Elcomponentereaccionaaeventosentrantes

La respuesta es también enformadeeventossalientes

El método execute procesaeventosentrantes ygenera comorespuestaeventossalientes

El payload de los eventos que provienen delfrontsellamacomando.Elqueprovienedelasfuentessellamadato

SubsistemadeDatos

Page 16: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye16

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatosEspacioAsíncronoLas caracterís<cas de los elementos fronterizos incluidosenelsubsistemadeaccesoadatoshacequeestaoperedeacuerdoaunmodelocompletamenteasíncrono.

Async

e e e e e

ContratoReacSvoHomogéneo

LoscomponentesdebencomparGrunmismocontrato que les permita operar dentro deunaarquitecturademensajes

RestricciónArquitectónica#3.ContratoReacSvoHomogéneo

CRUD

REST

PubSub

WSocket

datameta

Data

Laarquitecturadepipes&filtersnoseveafectadapor laheterogeneidadde las fuentesyaqueéstaseabsorbeenelcuerpodecadacomando

De formasimilar losmensajesdedatosabsorbentodos aquellos metadatos necesarios paragesGonarlarespuestadentrodelaarquitectura

SubsistemadeDatos

Page 17: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye17

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatosDireccionalidadLadireccionalidad se refierea ladirecciónque toman losflujosdedatosenlaarquitecturaPipes&Filters.Podemosdis<nguirentreflujosdeentradaydesalida.

e e e e e

Command

Los flujos entrantes corresponden acomandos de lectura / escrituraimpulsadosdesdeelfront

Flujosentrantes

Los flujos salientes corresponden arespuestas de datos emiGdas por lasfuentes

Flujossalientes

Data

FlujosEntrantes&SalientesIndependientes

Async

SubsistemadeDatos

Page 18: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye18

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatosDireccionalidadLadireccionalidad se refierea ladirecciónque toman losflujosdedatosenlaarquitecturaPipes&Filters.Podemosdis<nguirentreflujosdeentradaydesalida.

e e e e e

Command

Data

ComunicaciónCorrelada

Async

Dada la independenciaentreflujosentrantesy salientes es frecuente tener que aplicartécnicasdecorrelación

RestricciónArquitectónica#4.ComunicaciónCorrelada

Requiere técnicasdecorrelación

SubsistemadeDatos

Sincronía Asincronía

Request-Response

Query-Reply

OneWay

Request–AsyncResponse

NoSficaSón

Soporte natural enespacioasíncrono

Page 19: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye19

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatosDireccionalidadLadireccionalidad se refierea ladirecciónque toman losflujosdedatosenlaarquitecturaPipes&Filters.Podemosdis<nguirentreflujosdeentradaydesalida.

B A

ComunicaciónCorrelada.Ejemplo#1

e e e e e

A B Async

Dado el carácter asíncrono de larespuestaelordennoestágaranGzadoy puede ser necesario emparejar cadadatoconsucomandoporids

CorrelacióndeComandos&Datos

SubsistemadeDatos

Page 20: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye20

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatosDireccionalidadLadireccionalidad se refierea ladirecciónque toman losflujosdedatosenlaarquitecturaPipes&Filters.Podemosdis<nguirentreflujosdeentradaydesalida.

Si la respuesta a un comando seproducepor lotes es necesario correlarlas partes de la secuencia queconsGtuyenlainformacióncompleta

CorrelacióndeSecuencias

A

ComunicaciónCorrelada.Ejemplo#2

e e e e e

A2 A1 A3 Async

SubsistemadeDatos

Page 21: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye21

IntroducciónPatronesdeAccesoaDatos

III.ElSubsistemadeAccesoaDatosCardinalidadLaarquitecturadedatosobedecea lanecesidadprincipalde acomodar el modelo de back al esquema demodularidadu<lizadoenfront.Estatransformaciónmarcalacardinalidaddeflujos.

Los datos de back se adaptan alesquema visual de front y recíproca-mente lo que provocamulGplicidad deflujos

Transformación

Command C1

C2

Data D2

D1 Async

SubsistemadeDatos

Page 22: Arquitectura de Componentes Web. Patrones de Acceso a Datos

JavierVélezReyes@javiervelezreye

[email protected]

2PatronesdeDiseñoenelAccesoaDatos

§  PatronesdeAcceso&Ac<vación§  PatronesdeDistribución§  PatronesdeTransformación§  PatronesdeOp<mización§  PatronesdeControl

Patron

esdeDiseño

enelAccesoaDa

tos

Patron

esdeAc

cesoaDatos

Page 23: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye23

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

SubsistemadeAccesoaDatos

AccesoaDatos

Control

Acceso

Tran

sformación

Distrib

ución

OpG

miza

ción

AcGvación

ElsubsistemadeAccesoaDatossedisponeenunaseriedeniveles que persiguen ciertos principios construc<vos.Iremosdescribiéndolosalpresentarcadanivel.

Page 24: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye24

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

I.PatronesdeAcceso

AccesoaDatos

Control

Acceso

Tran

sformación

Distrib

ución

OpG

miza

ción

AcGvación

Las caracterísGcas parGculares de acceso a losdisGntos Gpos de fuentes de datos deberían sertransparentesaldesarrollador

NiveldeAcceso

Page 25: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye25

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

I.PatronesdeAcceso

SerequiereconectaraunafuentededatosenREST.Laconexiónse hace a través de una solicitud AJAX lo que convierte lasllamadasenasíncronas.

Elcomponentewc-restproporcionaunaccesodeclara<voalasllamadasenREST.Elcontratopermite operar a cualquiera de los 4 nivelesdelprotocolo[1].

FuenteREST

<wc-rest base="http://server" path="users/[[user]]" body=[[data]] action="[[task]]" header="[[hds]]"> </wc-rest>

La configuración paramétrica se puedehacer por data-binding. Después solorestaejecutarlaacción

Primero se proporcionan los parámetros pordata-binding que configuran la llamada ydespuésseejecutaelcomando.

get() post() put() delete()

data

Cuandolafuentedisponededatoslosemitecomouneventodedatos,enalineamientoconlaarquitectura

El contrato funcional permiteatacar, en forma demétodos, a lafuentededatosenback

wc-rest

[1].RichardsonMadurityModel-heps://goo.gl/aYlT

Page 26: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye26

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

I.PatronesdeAcceso

Se requiere conectar a una fuente de datos con comunicaciónbidireccional y asíncrona entre cliente y servidor. Para ello sedisponedeunservidorquesoportawebsockets.

Elcomponentewc-web-socketabreunacanaldecomunicaciónbidireccionalconelservidor.La comunicación para lectura y escritura sesoportaporeventos.

FuenteWebSocket

<wc-socket base="http://server" protocol="soap" channel="[[ch]]" data="[[data]]"> <wc-rule channel="ch1"/> <wc-rule channel="ch2"/> <wc-rule channel="ch3"/> </wc-socket>

La configuración de envío reside en losparámetros (channel) y (data). La derecepciónenloshijoslightDOM

Primero se proporcionan los parámetros pordata-bindingydespuésseejecutaelcomando.En este caso el componente no soporta elmodoauto.

send() receive()

data

Cuando por alguno de los canalesregistrados l legan datos, elcomponente emite un evento dedatos

Los métodos send & receivepermiten ejecutar el envío yescuchadedatos

wc-socket

Page 27: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye27

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

I.PatronesdeAcceso

Se requiere homogeneizar el acceso a fuentes de datos demanera que todas presenten el mismo contrato indepen-dientementedesuprotocolo.

El componente wc-data-source ofrece unaadaptación homogénea a cualquier fuente. Elcontrato está basado en la escucha recep<vadecomandos.

AdaptadorDataSource

<wc-data-source source="#ds" type="wc-rest"> <wc-rule from="command.uri" to="uri"/> <wc-rule from="command.data" to="body"/> ... </wc-data-source>

Lasreglasdeconfiguraciónestablecen,eneste caso, cómo se traduce el comandoentrante al contrato específico de lafuente

El componente recibe la fuente contra laqueopera (source)yel<pode fuente (type)parasabercómoproceder.

command

Este es un evento de entrada. Esdecir, un comando que con<eneunape<ciónenviadadesdeelfrontenformatoJSON

wc-rest

wc-web-socket

wc-data-source

Por detrás el componente Websabe mapear al contrato de cadafuenteyoperarconél

wc-session

wc-kase

wc-meteor

Page 28: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye28

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

II.PatronesdeAcSvación

AccesoaDatos

Control

Acceso

Tran

sformación

Distrib

ución

OpG

miza

ción

AcGvación

La selección de una fuente de datos y suacGvaciónparasuposteriorusodeberíaserunatareatransparentealdesarrollador

NiveldeAcSvación

Page 29: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye29

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

II.PatronesdeAcSvación

Algunasfuentesdedatosrequierendeciertalógicadeac<vacióndesde el front en la fase de arranque y cierta lógica dedesac<vaciónenlafasedeliberación.

Elcomponentewc-source-ac<vatorseencargadelanzarunarequestaalgúnservicioenbackencargado de ejecutar lógica de ac<vación yliberacióndefuentesyserviciosdedatos.

AcSvadordeFuente

<wc-source-activator source="#ds"> <wc-rule on="start" do="[[cmd1]]"/> <wc-rule on="stop" do="[[cmd2]]"/> </wc-data-source>

Lasreglasdefinenunciclodevidadinámico.Losmétodosdel componente para ese ciclo de vida se crean encaliente. En este ejemplo usamos la configuración deciclodevidamáshabitualconmétodos(start)y(stop).

El componente recibe la fuente contra laqueopera (source)yel<pode fuente (type)parasabercómoproceder.

Cierto componente usa el ac<vadorparaavisaralbackdequevausarseunafuentededatos

wc-source-acSvator

start() stop()

startrequest

start

[acGvated]

wc-cliente

Unusopar<culareselserviciodelogin/logout

Page 30: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye30

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

II.PatronesdeAcSvación

Seu<lizandiscrecionalmentevariasfuentesdedatosdediverso<poycondiversasconfiguracionesenfuncióndelascondicionesambientalesenlasqueserealizaelacceso.

El componente wc-source-provider organizapor claves diferentes <pos de fuentes conconfiguraciones específicas y las entrega alcliente.

ProveedordeFuentes

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

El uso de data-binding sobre el parámetro(source)permiteges<onardinámicamentelaconfiguracióndeestecomponente

Elproveedoresunregistrodefuentesqueserecuperan por claves. Las reglas refieren afuentesdefinidasenotrospuntosdelcódigo.

Ciertocomponenteusaelproveedorpara obtener una fuente de datosporclave

wc-data-source

wc-source-provider

Lacomunicaciónenestecasonoesporeventossinopormensajes

get

get(k)

wc-cliente

Page 31: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye31

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

II.PatronesdeAcSvación

Se trabajacondis<ntasconfiguracionesde fuentesdedatosdeforma temporal. Instanciar un componente para cadaconfiguraciónemmeraresultademasiadocostoso.

El componente crea fuentes de datosgenéricas bajo demanda. Cuando éstas seliberanporelcliente,sealmacenanenunpoolparasureu<lización.

AlmacéndeFuentes

<wc-source-store> <wc-rule type="wc-rest" size="3"/> <wc-rule type="wc-socket" size="1"/> ... </wc-source-store>

El almacén de fuentes de datos se configuraindicandoelnúmerode fuentesquesedeseatenerdisponiblesparacada<podeprotocolousado.

Durante la sesión de trabajo la fuente dedatosobtenidaestareservada,luegoseliberaparaserusadaporotrosclientes

wc-source-store

get(k) release(s)

get(k)

release(ds)

wc-cliente

wc-sources

get

release

(selected)

Page 32: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye32

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

III.PatronesdeDistribución

AccesoaDatos

Control

Acceso

Tran

sformación

Distrib

ución

OpG

miza

ción

AcGvación

Saber distribuir los comandos a cada unade las fuentes de datos con las queoperamos deber ía ser una tareatransparentealdesarrollador

NiveldeDistribución

Page 33: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye33

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

III.PatronesdeDistribución

Serequiereoperarcondiversasfuentesdedatosbajodiferentescircunstanciasquevienenmarcadasporel<poocontenidodelcomandooporlascondicionesambientales.

El componente wc-recruiter se encarga delocalizarunafuentededatosapropiadaparael<podecomandoyladevuelvealcliente.

Recruiter

<wc-recruiter data-provider="#p"> <wc-rule exp="[[x]]" source="key1"/> <wc-rule exp="[[y]]" source="key2"/> ... </wc-recruiter>

El reclutador es frecuentemente un compo-nenteespecíficodedominiosinconfiguraciónaunque pueden encontrarse versionesdeclara<vascomolasiguiente.

El componente selecciona una fuenteapropiadaylaentregacomoreferenciaalclienteparaqueopereconella

wc-recruiter

get(cmd)

wc-cliente

(selected)

ref

get(cmd)

Las reglas aquí sirven para expresar condicionesbajolascualesseescogeunafuentedeterminada.Unaopcióndereglamásavanzadaesesta…

<wc-rule exp="x.size > k" source="key"> <wc-where value="[[a]]" as="x"/> <wc-where value="[[b]]" as="k"/> </wc-rule>

Page 34: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye34

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

III.PatronesdeDistribución

Serequiereoperarcondiversasfuentesdedatosbajodiferentescircunstanciasquevienenmarcadasporel<poocontenidodelcomandooporlascondicionesambientales.

El componente wc-broker se encarga delocalizarunafuentededatosapropiadaparael<podecomandoyleenvíadichocomando.

Broker

El broker es frecuentemente un componenteespecífico de dominio sin configuraciónaunque pueden encontrarse versionesdeclara<vascomolasiguiente.

wc-broker

command

wc-sources

data

La fuente seleccionada recibeel comando entrante para suprocesamiento

(selected)

Las reglas de configuraciónoperan,enestecaso,deformasimilar a como lo hacen en elpatrónrecruiter

<wc-broker data-provider="#p"> <wc-rule exp="[[x]]" source="key1"/> <wc-rule exp="[[y]]" source="key2"/> ... </wc-broker>

Page 35: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye35

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

III.PatronesdeDistribución

Tuproyectooperaconunconjuntodefuentessimilaresbajounesquemadecompe<ción.Necesitasenviarunasolicitudatodasellasyextraerunarespuestaagregadaoselec<vadelasmismas.

El componente wc-scaeer-gather ofrece estecomportamiento devolviendo una solicitudagregada o filtrando la mejor respuesta bajoalgúncriterio.

Scaeer–Gather

<wc-scatter-gather data-provider="#p"> <wc-rule source="key1"/> <wc-rule source="key2"/> ... </wc-scatter-gather>

El componente se configura con reglas queindicanlacoleccióndefuentesdedatosentrelasquesedistribuyelasolicitud.

wc-scaeer-gather

wc-aggregator

command

wc-sourcesdata

data

data

data Los datos producidos por las fuentes sonrecolectados por un agregador (ver másadelante). Si se trata de un comando de esescrituraesteflujono<enesen<do

(allselected)

Page 36: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye36

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

III.PatronesdeDistribución

Serequiereoperarconunconjuntodefuentessimilaresbajounesquema de compe<ción. Sin embargo, se pretende aplicarlógicadebalanceodecargaparanosaturaraningunadeellas.

El componente wc-balancer aplica ciertapolí<ca de balanceo de carga y entrega elcomandoalafuenteseleccionada.

Balancer

<wc-balancer data-provider="#p"> <wc-round-robin size="3" policy/> <wc-rule source="key1"/> <wc-rule source="key2"/> ... </wc-balancer>

El balanceador se configura especificando unconjunto de fuentes de datos equivalentes yuncomponentequeimplementaelinterfazdepolí<ca.

wc-balancer

command

wc-sources

data

La fuente de datos seselecciona por aplicacióndeciertapolí<caespecífica

(selected)

§  Round–Robin§  Random§  Weighted–Round–Robin§  Weighted–Random§  S<ky

TiposdePolíScas

next()

next

Los componentes de pol í<casimplementan una interfaz que indicalafuentequedebeseleccionarse

wc-x-policy

Page 37: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye37

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

III.PatronesdeDistribución

Serequiereoperarconunconjuntodefuentessimilaresbajounesquemadecompe<ción.Cadaunadeellassedebeu<lizarbajocondicionesambientalesydecontextodiferentes.

El componente wc-switcher seleccionaautomá<camente la fuente de datosapropiada en función de las condiciones decontorno.

Switcher

<wc-switcher key="[[x]]" data-provider="#p"> <wc-rule when="real" source="key1"/> <wc-rule when="fake" source="key2"/> ... </wc-switcher >

Elselectordefuenteporcontextoseconfiguraindicando la propiedad (key) que debeobservarsedentrodelcontextoambiental.

wc-switcher

command

wc-sources

data

La fuente de datos seselecciona en función decondicionesambientales

(selected)

Al permutar el valor de la variableambientalxsecambialaestrategiadeseleccióndefuentes

{{x}}

Las reglas de configuración determinanquefuentedebeaplicarsesegúnelvalordellapropiedadobservada

Unusopar<culareslaconfiguraciónporentornosdedesarrollo

Page 38: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye38

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

III.PatronesdeDistribución

Serequiereoperarconunconjuntodefuentessimilaresbajounesquema de compe<ción. Sin embargo, no todas ellas seencuentrandisponiblesenunmomentodeterminado.

Elcomponentewc-chainestableceunacadenade fuentesdemaneraque si una fuente estadisponible procesa el comando y sino, se lopasaalasiguientefuenteenlacadena.

Chain

<wc-chain data-provider="#p"> <wc-rule source="k1" busy="[[b1]]"/> <wc-rule source="k2" busy="[[b2]]"/> <wc-rule source="k3" default/> ... </wc-data-source>

Dis<ntas instancias de fuente se enlazanformando una cadena de responsabilidad. Siuna fuente está ocupada se delega en elsiguienteelementoenlacadena.

wc-chaincommand

Laúl<mareglarefiereaunafuentededatosqueseencargadeoperarcuando las demás han estadoocupadas

wc-source

{{x}}

wc-chain wc-source

{{x}}

wc-source

ok

ok

busy

busy

Las reglas incluyen un flagpara marcar cuando unafuenteestáocupada

Page 39: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye39

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

III.PatronesdeDistribución

Se requiere operar con un conjunto de fuentes de datos. Sinembargo,laconexiónoelservicioqueledasoporteespropensoacaerseynoofrecedisponibilidadpermanente.

Elcomponentewc-retrierreintentaelataquealafuenteunnúmerodeterminadodevecesencasodefalloparaaumentarlaprobabilidaddeéxito.

Retrier

El componente opera contra una fuente dedatos.Lasreglasdeconfiguraciónindicanparacada <po de comando el númeromáximo deintentos(max)ylafrecuenciadeataque(ms).

(max)eselnúmeromáximodeintentosarealizar

wc-retriercommand command

wc-source

error

data

cmd#1

errorcmd#2

okcmd#3

(ms) es el <empo deesperaentreintentos

E l componente <enememoria para ges<onarsimultáneamente varioscomandosdiferentes

<wc-retrier source="k1" data-provider="#p"> <wc-session cache-provider/> <wc-rule exp="[[x]]" max="3" ms="300"/> <wc-rule exp="[[y]]" max="3" ms="5000"/> ... </wc-retrier>

Las expresiones de regla ayudan aevaluarelcomandoentranteparasaberquecriteriosdereintentoaplicarle

Page 40: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye40

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

III.PatronesdeDistribución

Serequiereoperarconunconjuntodefuentessimilaresbajounesquema de compe<ción. Sin embargo, éstas son propensas acaerseydenegarelserviciodurantelargo<empo.

Elcomponentewc-circuir-brakerdetectaestasfuentes inestables y las desconecta temporal-mentehastaquevuelvenaestaropera<vas.

CircuirBreaker

Elcomponenteseconfiguraconunproveedory la colección de referencias a fuentes quedebe u<lizar. Para resetear el estado debeinvocarseelmétodo(reset).

wc-circuit-breaker

command

wc-retriers

data

El patrón es en realidad unbalanceador + una colección deretriers.Cuandounretrieravisadeerror el componente desac<va lafuenteypruebaconlasiguiente

error El error del retrierhacequesedesac<ve

La siguiente fuente yaoperaadecuadamente

reset()

<wc-circuit-breaker data-provider="#p"> <wc-rule source="key1" time="30"/> <wc-rule source="key2" time="10"/> ... </wc-circuit-breaker>

El parámetro <empo (<me) de lasreglas indica el <empo que lafuente debe estar inaccesible. Porconveniencia, éste se expresa enminutos.

Page 41: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye41

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

IV.PatronesdeTransformación

AccesoaDatos

Control

Acceso

Tran

sformación

Distrib

ución

OpG

miza

ción

AcGvación

Acomodar las impedanciasentre lasesquemasdedatos de las fuentes y losmodelos de interacciónde front debería ser una tarea transparente aldesarrollador

NivelTransformación

Page 42: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye42

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

IV.PatronesdeTransformación

Algunos comandos o datos deben descartarse para que nolleguen a su obje<vo final. El criterio de filtro depende delcontenidoolascondicionesambientales.

El componente de filtro deja pasar sóloaquéllos eventos que verifican determinadapropiedad expresada en componentes deguarda.

Filter

El componente se configura a través de unacolección de reglas que refieren a losproveedoresdeguarda.SucriteriosecombinadeacuerdoaunalógicaANDuOR.

wc-filtere e

<wc-filter and> <wc-rule guard="#A"/> <wc-rule guard="#B"/> ... </wc-filter> <wc-exp id="A" exp="x.size > k" > <wc-where value="[[a]]" as="x"/> <wc-where value="[[b]]" as="k"/> </wc-exp> <wc-idempotent path="meta.id"/>

wc-guard

eventcheckcheck

event

wc-guard wc-target

El filtro consulta a loscomponentesdeguarda

Cada componente de guardavalora la conveniencia defiltrarelevento

El des<no sólo recibe loseventos que han atravesadoelfiltro

Unusopar<cularpermitedescartarcomandosdeescriturarepe<dos(idempotencia)

Page 43: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye43

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

IV.PatronesdeTransformación

Algunos comandos o datos deben enriquecerse antes de quelleguen a su obje<vo final. Los datos a incluir provienen delestadodeotroscomponentesocondicionesambientales.

El componente wc-enritcher se encarga deincluir informaciónen loseventosentrantesapar<rdedatosproporcionadosporproveedo-resdecontexto.

Enritcher

El componente se configura a través de unacolección de reglas que refieren a losproveedores de datos cuyas contribucionesseránañadidasaleventodesalida.

wc-enritchere e

<wc-enritcher> <wc-rule path="meta.id" from="#A"/> <wc-rule path="header.user" from="#B"/> <wc-rule path="header.app" from="#C"/> ... </wc-enritcher> <wc-session id="B" key="usr" level="local"/> <wc-session id="B" key="app" level="session"/> <wc-id-factory start="[[n]]"/>

usr app

Id++

event event'

usr app

Id=35

Elcomponenteenriqueceel evento entrante parapasarle datos de otroscomponentes

Generadordeiden<ficadoresúnicos

Eltokendeaplicaciónyusuariosealmacenalocalmenteyseañadealacabecera

wc-id-factory

wc-session

Page 44: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye44

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

IV.PatronesdeTransformación

Algunos comandos o datos se encuentran en un formatoincompa<ble para ser adecuadamente interpretados por sudes<no.Serequiereunatraducción.

El componente wc-translator especifica unaplan<lla de traducción donde se expresa elformatode salidaen funciónde losdatosdeleventodeentrada.

Translator

El componente se configura por medio de ladefinición de una plan<lla. Cualquiera de lasplan<llasdom-puedeu<lizarse.

wc-translatore e

<wc-translator> <template> { header : {}, body : { user : [[name]], pwd : [[password]] } } </template> </wc-translator>

event event'

El evento a la entradarepresentaunosdatosenciertoformato

El traductor expresa los datos deleventoalasalidaparaacomodarlosalformatoesperadoeneldes<no

El proceso de traducciónestádirigidoporplan<llas

Page 45: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye45

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

IV.PatronesdeTransformación

Algunosdeloscomandosodatosestánexpresadosaunniveldegranularidaddemasiadoaltoydebenserdescompuestosensuspartesatómicas.

El componente wc-splieer se encarga derealizar una descomposición del eventoentrante para generar una colección deeventosmássencillos.

Splieer

Laplan<llarecorreloselementosdedatosdelevento entrante y expresa el formato paracadaeventodesalida.

wc-splieere e1 e2 e3

<wc-splitter> <wc-rule path="cmd.items" as="item"/> <template>{ owner : [[cmd.user]], product : { name : [[item.name]] id : [[index]], amount : 1, price : [[item.price]] } } </template> </wc-splitter>

Laentradarecibeunevento en formacompuesta

Elcomponentedescomponeelevento en otros eventosatómicos

wc-target

E[d1, d2, d3]

d3 e

d2 e

d1 e

Payload de cada eventosaliente

Path donde reside lacolecciónapar<cionar

Page 46: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye46

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

IV.PatronesdeTransformación

Algunosdeloscomandosodatosestánexpresadosaunniveldegranularidad demasiado bajo y deben ser agregados en unaestructuracompuesta.

El componente wc-aggregator se encarga derealizar una composicióndeuna coleccióndeeventos atómicos entrantes para generar uneventoscompuesto.

Aggregator

Laplan<llase interpretaensen<do inversoalcaso anterior. Construye un esquemacomplejo desde una colección de itemsrecolectadosenel<empo.

wc-aggregatore e1 e2 e3 Llegan a lo largo del

<empoeventosatómicos

El componente analiza el iden<fi-cador de secuencia para sabercuandoemi<releventocompuesto

wc-target

E[d1, d2, d3]

d3 e

d2 e

d1 e

<wc-aggregator> <template>{ cmd : 'basket, <template is='dom-repeat' items='{{items}}'>{ owner : [[user.name]], products : [[data.prods]] } </template> } </template> </wc-aggregator>

Page 47: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye47

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

V.PatronesdeOpSmización

AccesoaDatos

Control

Acceso

Tran

sformación

Distrib

ución

OpG

miza

ción

AcGvación

OpGmizar el acceso a las fuentesde datos debería ser una tareatransparentealdesarrollador

NiveldeOpSmización

Page 48: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye48

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

VI.PatronesdeOpSmización

Algunos comandos de lectura se repiten recurrentemente a lolargode lasesióndetrabajo loqueprovocaunasobrecargadelasfuentesdedatos.

El componente wc-cache es una memoriaintermediade acceso rápidoquedescargadetrabajo a las fuentes cuando el dato se hacargadorecientemente.

Cache

Elcomponenteseconfiguraconunproveedorde persistencia e información acerca del<empo de vida que residen los datos enmemoria.

<wc-cache time="30" path="cmd.query"> <wc-session cache-provider/> </wc-cache>

Elparámetro<empo(<me)expresael<empodevidaenminutosdelosdatosencache

Laruta(path)dicea lacachequé dato del comando delectura corresponde a lac lave con que se hanpersis<dolosdatos

wc-cachecommand data

data wc-source

readread

data

read

wc-target

data

Nosedisponedelosdatosyseconsultalafuente

Yasedisponedelosdatosyseentreganalcliente

data

Page 49: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye49

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

V.PatronesdeOpSmización

Algunas fuentes exponen sus colección de datos de acuerdo auna lógica de paginación. El acceso a esta información deberíarealizarsedeformafluidahaciendotransparentedichalógica.

Elcomponentewc-pageresunapoderadoquepermite explorar colecciones paginadas deforma transparente ofreciendo una sensacióndecon<nuidadenlosdatos.

Pager

El componente paginador se configuraindicando el proveedor de persistencia y el<empodevidadelaspáginas.

<wc-pager time="30" path="cmd.page" start="1"> <wc-session cache-provider/> </wc-pager>

El paginador también funciona comouna cache anivel de página de manera que sólo consulta lafuentecuandonodisponedelapáginaenlocal

En este caso (start) indicalapáginadecomiendo.

wc-pagercommand data

data wc-source

nextread

data

previous

wc-target

data

data

El comando se encarga deges<onar el númerodepáginayenriquecerelpayload

Page 50: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye50

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

V.PatronesdeOpSmización

Algunos <pos de datos requieren un tratamiento transaccionalaunque sus fuentes no lo soporten. Se requiere emular latransaccionalidaddesdeelfront.

El componente wc-transac<on re<ene elprocesamiento de los comandos entrantespara que se procesen en bloque sólo a lallegadadeunaseñal.

TransacSon

El componente transacción se configuraindicandoelproveedordepersistenciadondeseacumulanloseventosantesdeenviarse.

wc-transacSoncommand wc-aggregator

commit

writewritewrite

wc-source

writewritewrite

write-allLa transacción suele combi-narse con un agregador paragenerar un único paquete dedatos

<wc-transaction> <wc-session cache-provider/> <wc-rule when='[[exp]]' commit/> </wc-transaction>

Todos los comandos se persistenlocalmente a la espera de quellegue una señal explícita decommit

La expresión (exp) ayuda alcomponente a iden<ficar loscomandos que correspondenasentenciascommit

Page 51: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye51

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

V.PatronesdeOpSmización

Algunas fuentesdedatosoperanaun ritmomás lentodelquelos datos son generados en front. Se requiere un mecanismoparanosaturaralafuentebasadoeneldescartededatos.

El componente wc-throele se encarga degaran<zar que cualquier comando que seemita demasiado próximo en <empo a otroanteriorseadescartado.

Throele

El componente se configura indicando el<empo en milisegundos que debe aplicarsecomoumbralparadescartareventos.

wc-throelecommand wc-target

e1 e1

Se descartan todos aquelloseventos que llegan con unafrecuenciademasiadorápida

e3e2

e4e5

e6

e3

e5 Este patrón se aplica bajo lahipótesis de que la pérdida deeventos no es significa<va para elproblema

<wc-throttle ms="[[t]]"> </wc-throttle>

Page 52: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye52

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

V.PatronesdeOpSmización

Algunas fuentesdedatosoperanaun ritmomás lentodelquelos datos son generados en front. Se requiere un mecanismoparanosaturaralafuentebasadoenelencoladodedatos.

El componente wc-delayer introduce unretardo temporal fijo en todos los comandosqueprovienendesdeelfrontparanosaturaralafuente.

Delayer

El componente se configura indicando el<empo en milisegundos que debe retardarselapropagacióndeeventosyunproveedordepersistencia.

wc-delayercommand wc-target

e1 e1

En este caso no se pierdeneventos pero se acomoda lafrecuenciadellegada

e3e2

e2

e3 Este patrón puede suponer uncuellodebotellayaqueloseventosnosepierden,sóloseretardan

<wc-delayer ms="[[t]]"> <wc-session cache-provider/> </wc-delayer>

Page 53: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye53

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

VI.PatronesdeControl

AccesoaDatos

Control

Acceso

Tran

sformación

Distrib

ución

OpG

miza

ción

AcGvación

Los mecanismos de integración entre lasvistas (componentes UI) y las fuentes dedatos (componentes de daros) deberíansertransparentesaldesarrollador

NiveldeControl

Page 54: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye54

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

VI.PatronesdeControl

Diferentes<posdefuentesdedatosu<lizandis<ntosprotocolosdeacceso.Serequiereabstraersuformadeusoparaqueoperendeformahomogénea.

Este componente encapsula la complejidadinherenteaunprotocolodeusodeunafuenteen un mensaje JSON (comando) que sepropagacomoeventoenlaarquitectura.

CommandProvider

El componente se configura definiciendo loscomandos por propiedades e indicando elcontextodondeseevaluanlaspropiedades(:)

<wc-command-provider context="[[ctx]]"> <wc-rule command="cinemas"> <wc-property path="cmd.verb" value="get"/> <wc-property path="cmd.uri" value="/cinemas"/> </wc-rule> <wc-rule command="movies"> <wc-property path="cmd.verb" value="get"/> <wc-property path="cmd.uri" value="/cinemas/[c]/movies"/> </wc-rule> <wc-rule command="sessions"> <wc-property path="cmd.verb" value="get"/> <wc-property path="cmd.uri" value="/cinemas/[c]/movies/[m]/sessions"/> </wc-rule> ... </wc-command-provider>

wc-command-provider

get(k)

k1 :

k2 :

k3 :

1.Seob<eneelcomandoporclave

wc-cliente

wc-data-source wc-rest2.selanzaelcomandoenuneventocommandhastalafuente command

3.Lafuentereinterpretaelcomandoenunaoperacióndeprotocolo

post()

Page 55: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye55

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

VI.PatronesdeControl

Dis<ntosdatosque llegandesde las fuentesdedatosen formade eventos deben ser retenidos para poder ser consultadosposteriormenteencualquiermomento.

Elcomponentewc-data-portseencargadedaraccesoa losdatosdeuncanaldeeventosenunapropiedaddedata-binding.

DataPort

El componente se configura indicando lafuentededatos (source)aescuchar.El (path)eslarutaeneleventodedatosquedeterminaenfunciónde(when)dondedepositareldato.

<wc-data-port source="#ds1" path="..."> <wc-rule when="A" data="{{d1}}"/> <wc-rule when="B" data="{{d2}}"/> <wc-rule when="C" data="{{d3}}"/> </wc-data-port>

#ds1

wc-data-port e

e1

e2

{{x}}

{{y}}

A

B

Page 56: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye56

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

VI.PatronesdeControl

Se requiere explorar en profundidad una fuente de datosorientada a recursos. El progreso de la exploración quedacontroladoporpropiedadesendata-binding.

El componente proporciona un mecanismoexplícito para realizar la exploración contro-lada por variables y centralizar los comandosdeataque.

DataDrivenClient

Elcomponenteseconfiguraconunproveedorde comandos y una colección de reglas queindican el avance en la exploración cada vezqueunanuevavariabletomavalor.

<wc-data-client command-provider="#p"> <wc-rule command="cinemas"/> <wc-rule command="movies" when="[[c]]"/> <wc-rule command="sessions" when="[[m]]"/> </wc-data-client> cinemas

movies

sessions

/cinemas

/cinemas/{{c}}/movies

/cinemas/{{c}}/movies/{{m}}/sessions

{{c}}

{{m}}

wc-data-driven-clientcommand

{{c}}

{{m}} && {{c}}

Seexploraenprofundidadunespacioderecursos

Las variables pobladasdeterminan el progresoenlaincursión

cinemas

movies

sessions

Page 57: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye57

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

VI.PatronesdeControl

Se requiere explorar en profundidad una fuente de datosorientada a recursos. El progreso de la exploración quedacontroladoporeventos.

El componente man<ene el estado de lanavegación y ofrece un mecanismo explícitode realizar la exploración controlada poreventos.

EventDrivenClient

Elcomponenteseconfiguraconunproveedorde comandos y una colección de reglas queindican el avance en la exploración cada vezquellegaunnuevoevento.

<wc-data-client command-provider="#p"> <wc-rule command="cinemas"/> <wc-rule command="movies" on="e1"/> <wc-rule command="sessions" on="e2"/> </wc-data-client> cinemas

movies

sessions

/cinemas

/cinemas/{{c}}/movies

/cinemas/{{c}}/movies/{{m}}/sessions

wc-event-driven-clientcommand

e1 (c)

e2 (m) + (c)

Seexploraenprofundidadunespacioderecursos

Lasvariablesextraídasdeleventodeterminanelprogresoenlaincursión

cinemas

movies

sessions

c

m

Page 58: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye58

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

VI.PatronesdeControl

Se requiere explorar una fuente de datos hypermedia. Laexploración queda controlada por un conjunto de eventos querepresentanmovimientossobreelgrafoderecursos.

El componente man<ene el estado de lanavegación sobre el espacio hypermedia derecursos y controla su progreso dirigido poreventos.

HypermediaClient

El comando sólo requiere una referencia alestado/recursoinicial.Elrestodeestadosysuscomandos asociados se extraen de larespuesta(response).

root

wc-hypermedia-clientcommand

Books

Books

Books

Books

mine

shared add del

add

item

Book

Book#1…n-1

Book#n

related

Account

Account

purchase

<wc-hypermedia-client command-provider="#p"> <wc-rule start-command="root"/> <wc-rule response="{{data}}"/> </wc-hypermedia-client>

Cadarelaciónesuncomandocuya estructura está en larespuesta del comandoanterior

Cada recurso representa unestadodelaaplicación

Page 59: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye59

PatronesdeDiseñoenelAccesoaDatosPatronesdeAccesoaDatos

VI.PatronesdeControl

Serequierereaccionarcontraunafuentededatoscadavezqueseproduceuncambioasíncronoenelcontextoambientaldondesedesarrollaelfront.

Elcomponenteseman<enealaescuchadeloscambios de las condiciones ambientales quesonobjetodeinterésreac<vo.

Observer

Elcomponenteseconfiguraconunagentedeescucha(spy)que lanzaeventoscadavezqueseproducencambios.

<wc-observer command-provider="#p"> <wc-dom-spy path="css" spy/> <wc-js-spy target="{{wc}}" spy/> <wc-event-spy target="{{wc}}" spy/> <wc-rule on="e1" command="k1"/> <wc-rule on="e2" command="k2"/> <wc-rule on="e3" command="k3"/> </wc-observer>

3 de los ejemplos deespíamáscomunes

Las reglas indican con quécomandos debe reaccionarseparacada<podeevento

wc-observere command

wc-dom-spy

wc-js-spy

wc-event-spy

dom

e

e3

e2

e1

cmde'

e'

e'

Page 60: Arquitectura de Componentes Web. Patrones de Acceso a Datos

JavierVélezReyes@javiervelezreye

[email protected]

3ElSubsistemadeAccesoaDatosenlaPrác>ca

§  Escenariodee-commerce§  Arquitectura§  FlujosdeIteración

ElSub

sistem

ade

AccesoaDa

tose

nlaPrác>ca

Patron

esdeAc

cesoaDatos

Page 61: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye61

ElSubsistemadeAccesoaDatosenlaPrác<ca

PatronesdeAccesoaDatos

Camisa informal Bolsillos con botones

COMPRAR

S M L X XL

VER

Camisa informal Cuadro escocés

COMPRAR

S M L X XL

VER

Camisa informal Cuello abotonado

COMPRAR

S M L X XL

VER

Camisa informal Tartán de algodón

COMPRAR

S M L X XL

VER

Camisa informal Tela vaquera

COMPRAR

S M L X XL

VER

Camisas

Camisetas

Camiseta de algodón Estampado grande

COMPRAR

S M L X XL

VER

Camiseta de algodón Estampado grande

COMPRAR

S M L X XL

VER

Camiseta de algodón Motivo de texto

COMPRAR

S M L X XL

VER

Camiseta de algodón Cuello redondo

COMPRAR

S M L X XL

VER

Camiseta de algodón Estampado a color

COMPRAR

S M L X XL

VER

Hombre Mujer Pagar

I.Portaldee-Commerce.Escenario

Selectordecategoría

Sudaderas

Selectordecolección

Sliderdecolección

Botóndepago

Botóndecompra

Page 62: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye62

ElSubsistemadeAccesoaDatosenlaPrác<ca

PatronesdeAccesoaDatos

II.Portaldee-Commerce.FlujodeExploraciónA

Hombre Mujer Pagar

Sudaderas

Camisas

Camisetas

wc-command-provider

wc-data-port

wc-cache

wc-data-source

wc-rest

wc-data-client{{category}}

get('collecGons')cmd

cmd cmdGet/categories/hombre/collections

data

{{collections}}

{{collections}}

Page 63: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye63

ElSubsistemadeAccesoaDatosenlaPrác<ca

PatronesdeAccesoaDatos

II.Portaldee-Commerce.FlujodeExploraciónA

Hombre Mujer Pagar

Sudaderas

Camisas

Camisetas

wc-command-provider

wc-data-port

wc-cache

wc-data-source

wc-rest

wc-data-client{{category}}

{{collections}}

{{collection}}

get('items')cmd

cmd cmdGet/categories/hombre/collections/ camisas/items

data

{{collections}} {{items}}

{{items}}

Page 64: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye64

ElSubsistemadeAccesoaDatosenlaPrác<ca

PatronesdeAccesoaDatos

II.Portaldee-Commerce.FlujodeExploraciónB

Hombre Mujer Pagar

Camisetas

Sudaderas

Camisa informal Bolsillos con botones

COMPRAR

S M L X XL

VER

Camisa informal Cuadro escocés

COMPRAR

S M L X XL

VER

Camisa informal Cuello abotonado

COMPRAR

S M L X XL

VER

Camisa informal Tartán de algodón

COMPRAR

S M L X XL

VER

Camisa informal Tela vaquera

COMPRAR

S M L X XL

VER

Camisas

wc-command-provider

wc-data-port

wc-cache

wc-data-source

wc-rest

wc-data-client

wc-pager

{{category}}

{{collections}}

{{collection}}

get('items-next')cmd Get

/categories/hombre/collections/ camisas/items?page="2"

data

cmd cmd

{{items}} {{items}}

Page 65: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye65

ElSubsistemadeAccesoaDatosenlaPrác<ca

PatronesdeAccesoaDatos

II.Portaldee-Commerce.FlujodeExploraciónB

Hombre Mujer Pagar

Camisetas

Sudaderas

Camisa informal Bolsillos con botones

COMPRAR

S M L X XL

VER

Camisa informal Cuadro escocés

COMPRAR

S M L X XL

VER

Camisa informal Cuello abotonado

COMPRAR

S M L X XL

VER

Camisa informal Tartán de algodón

COMPRAR

S M L X XL

VER

Camisa informal Tela vaquera

COMPRAR

S M L X XL

VER

Camisas

wc-command-provider

wc-data-port

wc-cache

wc-data-source

wc-rest

wc-data-client

wc-pager

{{category}}

{{collections}}

{{collection}}

get('items-previous')cmd

cmd

{{items}} {{items}}

data

Page 66: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye66

ElSubsistemadeAccesoaDatosenlaPrác<ca

PatronesdeAccesoaDatos

II.Portaldee-Commerce.FlujodeCompra

Hombre Mujer Pagar

Camisetas

Sudaderas

Camisa informal Bolsillos con botones

COMPRAR

S M L X XL

VER

Camisa informal Cuadro escocés

COMPRAR

S M L X XL

VER

Camisa informal Cuello abotonado

COMPRAR

S M L X XL

VER

Camisa informal Tartán de algodón

COMPRAR

S M L X XL

VER

Camisa informal Tela vaquera

COMPRAR

S M L X XL

VER

Camisas

wc-command-provider

wc-transac<on

wc-data-source wc-rest

wc-observerpurchase

get('purchase')cmd

cmd

OK

Page 67: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye67

ElSubsistemadeAccesoaDatosenlaPrác<ca

PatronesdeAccesoaDatos

II.Portaldee-Commerce.FlujodeExploraciónA

Hombre Mujer Pagar

Camisetas

Sudaderas

Camisa informal Bolsillos con botones

COMPRAR

S M L X XL

VER

Camisa informal Cuadro escocés

COMPRAR

S M L X XL

VER

Camisa informal Cuello abotonado

COMPRAR

S M L X XL

VER

Camisa informal Tartán de algodón

COMPRAR

S M L X XL

VER

Camisa informal Tela vaquera

COMPRAR

S M L X XL

VER

Camisas

wc-command-provider

wc-data-port

wc-cache

wc-data-source

wc-rest

wc-data-client{{category}}

{{collections}}

{{collection}}

get('items')cmd

cmd cmdGet/categories/hombre/collections/ camisas/items

data

{{collections}} {{items}}

{{items}}

Page 68: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye68

ElSubsistemadeAccesoaDatosenlaPrác<ca

PatronesdeAccesoaDatos

II.Portaldee-Commerce.FlujodeCompra

Hombre Mujer Pagar

Camisas

Sudaderas

camisetas

Camiseta de algodón Estampado grande

COMPRAR

S M L X XL

VER

Camiseta de algodón Estampado grande

COMPRAR

S M L X XL

VER

Camiseta de algodón Motivo de texto

COMPRAR

S M L X XL

VER

Camiseta de algodón Cuello redondo

COMPRAR

S M L X XL

VER

Camiseta de algodón Estampado a color

COMPRAR

S M L X XL

VER

wc-command-provider

wc-transac<on

wc-data-source wc-rest

wc-observerpurchase

get('purchase')cmd

cmd

OK

Page 69: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye69

ElSubsistemadeAccesoaDatosenlaPrác<ca

PatronesdeAccesoaDatos

II.Portaldee-Commerce.FlujodeExploraciónA

Hombre Mujer Pagar

Camisas

Sudaderas

camisetas

Camiseta de algodón Estampado grande

COMPRAR

S M L X XL

VER

Camiseta de algodón Estampado grande

COMPRAR

S M L X XL

VER

Camiseta de algodón Motivo de texto

COMPRAR

S M L X XL

VER

Camiseta de algodón Cuello redondo

COMPRAR

S M L X XL

VER

Camiseta de algodón Estampado a color

COMPRAR

S M L X XL

VER

wc-command-provider

wc-data-port

wc-cache

wc-data-source

wc-rest

wc-data-client{{category}}

{{collections}}

{{collection}}

get('items')cmd

cmd

data

{{collections}} {{items}}

{{items}}

Page 70: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye70

ElSubsistemadeAccesoaDatosenlaPrác<ca

PatronesdeAccesoaDatos

II.Portaldee-Commerce.FlujodeCompra

Hombre Mujer Pagar

Camisetas

Sudaderas

Camisa informal Bolsillos con botones

COMPRAR

S M L X XL

VER

Camisa informal Cuadro escocés

COMPRAR

S M L X XL

VER

Camisa informal Cuello abotonado

COMPRAR

S M L X XL

VER

Camisa informal Tartán de algodón

COMPRAR

S M L X XL

VER

Camisa informal Tela vaquera

COMPRAR

S M L X XL

VER

Camisas

wc-command-provider

wc-transac<on

wc-data-source wc-rest

wc-observerpurchase

get('purchase')cmd

cmd

OK

Page 71: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye71

ElSubsistemadeAccesoaDatosenlaPrác<ca

PatronesdeAccesoaDatos

II.Portaldee-Commerce.FlujodePago

Hombre Mujer Pagar

Camisetas

Sudaderas

Camisa informal Bolsillos con botones

COMPRAR

S M L X XL

VER

Camisa informal Cuadro escocés

COMPRAR

S M L X XL

VER

Camisa informal Cuello abotonado

COMPRAR

S M L X XL

VER

Camisa informal Tartán de algodón

COMPRAR

S M L X XL

VER

Camisa informal Tela vaquera

COMPRAR

S M L X XL

VER

Camisas

wc-command-provider

wc-transac<onwc-observerpayment

get('payment')cmd

cmd

wc-aggregator

cmd

OK

wc-filter

logged?

No Si

wc-data-source wc-enritcher

cmd

wc-restPost()

cmd cmd

wc-login wc-ac<vator

Page 72: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye72

ConclusiónPatronesdeAccesoaDatos

Conclusión

ParaelusuariodesarrolladordecomponentesWebdeberíasertransparentelanaturalezadelafuentede datos, su lógica acceso y ac<vación, y lasnecesidades de transformación y op<mizaciónpotenciales.

Page 73: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye73

PreguntasPatronesdeAccesoaDatos

www.javiervelezreyes.com

PatronesdeAccesoaDatos

ArquitecturasOrientadasaComponentesWeb

Page 74: Arquitectura de Componentes Web. Patrones de Acceso a Datos

@javiervelezreye74

ReferenciasPatronesdeAccesoaDatos

Referencias

LaWebOrientadaaComponentes

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

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

PrincipiosdeDiseñoenComponentesWeb

Fecha Marzode2015Lugar PolymerMadridPáginas 170Ref heps://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 75: Arquitectura de Componentes Web. Patrones de Acceso a Datos

JavierVélezReyes@javiervelezreye

[email protected]

PatronesdeAccesoaDatos

ArquitecturasOrientadasaComponentesWeb

Octubre2016