La mayor parte de los aplicativos que manejamos hoy en día corresponden con arquitecturas centradas en los datos. Modelos de información expuestos en forma de servicios que son explorados en profundidad. En este contexto, las arquitecturas de componentes Web se presentan como una solución idónea para llevar a cabo este proceso exploratorio de manera sencilla y declarativa. A lo largo de esta charla discutiremos este tipo de arquitecturas y presentaremos los patrones de diseño fundamentales que resuelven este tipo de escenarios.
5. @javiervelezreye 5
Introducción
Patrones de Acceso a Datos
I. Arquitectura de Referencia Para Componentes Web
Una arquitectura de referencia establece orientación
acerca de cómo pueden construirse soluciones orientadas
a componentes Web.
Data
Session
Offline
Integra<on
Access
Role Based
Channel Based
Context Based
View Control
Paging Rou<ng
Content
Containers
Interac<on
Coopera<on
Coordina<on
Comunica<on
Composi<on
Universal Apps
Performance Security
Monitoring Authe. & Autho. Op<miza<on WC & Resource Management
Layers
No<fica<on
User Based
Channel
Viewers
10. @javiervelezreye 10
Introducción
Patrones de Acceso a Datos
III. El Subsistema de Acceso a Datos
Dentro de la capa de integración se dis<nguen 4
subsistemas que <enen responsabilidades concomitantes
con la ges<ón de datos de fuentes externas.
Data
Session
Offline
Integra<on
Channel
Cómo se gesGona el
diferimiento de información
de estado entre sesiones de
trabajo
Control de Sesión
Cómo se gesGona el acceso a
fuentes de datos y los flujos
de información asociados
Acceso a Datos
Cómo se gesGona la
información extraída del canal
uGlizado (móvil, broser, etc.)
Control de Canal
Cómo se gesGona el acceso a
a datos en contextos de uso
inestables o con desconexión
Acceso Offline
12. @javiervelezreye 12
Introducción
Patrones de Acceso a Datos
III. El Subsistema de Acceso a Datos
Subsistema de Datos
Espacio Asíncrono
Las caracterís<cas de los elementos fronterizos incluidos
en el subsistema de datos hace que ésta opere de acuerdo
a un modelo completamente asíncrono.
Desde la perspecGva declaraGva, el
interacción con el subsistema de
datos se hace de manera asíncrona
ya sea a través de eventos o por
medio de data-binding
Interacción asíncrona
Pese a que las fuentes operan en
modelos síncrono y asíncrono (según
Gpo), su acceso desde front, a través
de AJAX es siempre asíncrono
Acceso asíncrono
Async
14. @javiervelezreye 14
Introducción
Patrones de Acceso a Datos
III. El Subsistema de Acceso a Datos
Espacio Asíncrono
Las caracterís<cas de los elementos fronterizos incluidos
en el subsistema de acceso a datos hace que esta opere de
acuerdo a un modelo completamente asíncrono.
Async
e e e e e
Arquitectura Dirigida por Eventos
Las relaciones composiGvas se establecen de acuerdo a
un modelo de eventos. Cada componente opera
reacGvamente en función de los eventos que le llegan
Restricción Arquitectónica #2. Arquitectura EDA
Subsistema de Datos
15. @javiervelezreye 15
Introducción
Patrones de Acceso a Datos
III. El Subsistema de Acceso a Datos
Espacio Asíncrono
Las caracterís<cas de los elementos fronterizos incluidos
en el subsistema de acceso a datos hace que esta opere de
acuerdo a un modelo completamente asíncrono.
Async
e e e e e
Contrato ReacSvo Homogéneo
incoming outgoing
call
event command
data
execute (e)
Los componentes deben comparGr un mismo
contrato que les permita operar dentro de
una arquitectura de mensajes
Restricción Arquitectónica #3.
Contrato ReacSvo Homogéneo
El componente reacciona
a eventos entrantes
La respuesta es también en
forma de eventos salientes
El método execute procesa
eventos entrantes y genera como
respuesta eventos salientes
El payload de los eventos que provienen del
front se llama comando. El que proviene de las
fuentes se llama dato
Subsistema de Datos
16. @javiervelezreye 16
Introducción
Patrones de Acceso a Datos
III. El Subsistema de Acceso a Datos
Espacio Asíncrono
Las caracterís<cas de los elementos fronterizos incluidos
en el subsistema de acceso a datos hace que esta opere de
acuerdo a un modelo completamente asíncrono.
Async
e e e e e
Contrato ReacSvo Homogéneo
Los componentes deben comparGr un mismo
contrato que les permita operar dentro de
una arquitectura de mensajes
Restricción Arquitectónica #3.
Contrato ReacSvo Homogéneo
CRUD
REST
Pub Sub
WSocket
data
meta
Data
La arquitectura de pipes & filters no se ve afectada
por la heterogeneidad de las fuentes ya que ésta
se absorbe en el cuerpo de cada comando
De forma similar los mensajes de datos absorben
todos aquellos metadatos necesarios para
gesGonar la respuesta dentro de la arquitectura
Subsistema de Datos
25. @javiervelezreye 25
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
I. Patrones de Acceso
Se requiere conectar a una fuente de datos en REST. La conexión
se hace a través de una solicitud AJAX lo que convierte las
llamadas en asíncronas.
El componente wc-rest proporciona un acceso
declara<vo a las llamadas en REST. El contrato
permite operar a cualquiera de los 4 niveles
del protocolo [1].
Fuente REST
<wc-rest
base="http://server"
path="users/[[user]]"
body=[[data]]
action="[[task]]"
header="[[hds]]">
</wc-rest>
La configuración paramétrica se puede
hacer por data-binding. Después solo
resta ejecutar la acción
Primero se proporcionan los parámetros por
data-binding que configuran la llamada y
después se ejecuta el comando.
get()
post()
put()
delete()
data
Cuando la fuente dispone de datos
los emite como un evento de datos,
en alineamiento con la arquitectura
El contrato funcional permite
atacar, en forma de métodos, a la
fuente de datos en back
wc-rest
[1]. Richardson Madurity Model - heps://goo.gl/aYlT
26. @javiervelezreye 26
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
I. Patrones de Acceso
Se requiere conectar a una fuente de datos con comunicación
bidireccional y asíncrona entre cliente y servidor. Para ello se
dispone de un servidor que soporta web sockets.
El componente wc-web-socket abre una canal
de comunicación bidireccional con el servidor.
La comunicación para lectura y escritura se
soporta por eventos.
Fuente Web Socket
<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 los
parámetros (channel) y (data). La de
recepción en los hijos light DOM
Primero se proporcionan los parámetros por
data-binding y después se ejecuta el comando.
En este caso el componente no soporta el
modo auto.
send()
receive()
data
Cuando por alguno de los canales
registrados llegan datos, el
componente emite un evento de
datos
Los métodos send & receive
permiten ejecutar el envío y
escucha de datos
wc-socket
27. @javiervelezreye 27
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
I. Patrones de Acceso
Se requiere homogeneizar el acceso a fuentes de datos de
manera que todas presenten el mismo contrato indepen-
dientemente de su protocolo.
El componente wc-data-source ofrece una
adaptación homogénea a cualquier fuente. El
contrato está basado en la escucha recep<va
de comandos.
Adaptador Data Source
<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>
Las reglas de configuración establecen, en
este caso, cómo se traduce el comando
entrante al contrato específico de la
fuente
El componente recibe la fuente contra la que
opera (source) y el <po de fuente (type) para
saber cómo proceder.
command
Este es un evento de entrada. Es
decir, un comando que con<ene
una pe<ción enviada desde el front
en formato JSON
wc-rest
wc-web-socket
wc-data-source
Por detrás el componente Web
sabe mapear al contrato de cada
fuente y operar con él
wc-session
wc-kase
wc-meteor
29. @javiervelezreye 29
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
II. Patrones de AcSvación
Algunas fuentes de datos requieren de cierta lógica de ac<vación
desde el front en la fase de arranque y cierta lógica de
desac<vación en la fase de liberación.
El componente wc-source-ac<vator se encarga
de lanzar una request a algún servicio en back
encargado de ejecutar lógica de ac<vación y
liberación de fuentes y servicios de datos.
AcSvador de Fuente
<wc-source-activator source="#ds">
<wc-rule on="start" do="[[cmd1]]"/>
<wc-rule on="stop" do="[[cmd2]]"/>
</wc-data-source>
Las reglas definen un ciclo de vida dinámico. Los métodos
del componente para ese ciclo de vida se crean en
caliente. En este ejemplo usamos la configuración de
ciclo de vida más habitual con métodos (start) y (stop).
El componente recibe la fuente contra la que
opera (source) y el <po de fuente (type) para
saber cómo proceder.
Cierto componente usa el ac<vador
para avisar al back de que va usarse
una fuente de datos
wc-source-acSvator
start()
stop()
start
request
start
[acGvated]
wc-cliente
Un uso par<cular es el
servicio de login / logout
31. @javiervelezreye 31
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
II. Patrones de AcSvación
Se trabaja con dis<ntas configuraciones de fuentes de datos de
forma temporal. Instanciar un componente para cada
configuración emmera resulta demasiado costoso.
El componente crea fuentes de datos
genéricas bajo demanda. Cuando éstas se
liberan por el cliente, se almacenan en un pool
para su reu<lización.
Almacén de Fuentes
<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 configura
indicando el número de fuentes que se desea
tener disponibles para cada <po de protocolo
usado.
Durante la sesión de trabajo la fuente de
datos obtenida esta reservada, luego se libera
para ser usada por otros clientes
wc-source-store
get(k)
release(s)
get (k)
release (ds)
wc-cliente
wc-sources
get
release
(selected)
36. @javiervelezreye 36
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
III. Patrones de Distribución
Se requiere operar con un conjunto de fuentes similares bajo un
esquema de compe<ción. Sin embargo, se pretende aplicar
lógica de balanceo de carga para no saturar a ninguna de ellas.
El componente wc-balancer aplica cierta
polí<ca de balanceo de carga y entrega el
comando a la fuente seleccionada.
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 un
conjunto de fuentes de datos equivalentes y
un componente que implementa el interfaz de
polí<ca.
wc-balancer
command
wc-sources
data
La fuente de datos se
selecciona por aplicación
de cierta polí<ca específica
(selected)
§ Round – Robin
§ Random
§ Weighted – Round – Robin
§ Weighted – Random
§ S<ky
Tipos de PolíScas
next()
next
Los componentes de polí<cas
implementan una interfaz que indica
la fuente que debe seleccionarse
wc-x-policy
38. @javiervelezreye 38
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
III. Patrones de Distribución
Se requiere operar con un conjunto de fuentes similares bajo un
esquema de compe<ción. Sin embargo, no todas ellas se
encuentran disponibles en un momento determinado.
El componente wc-chain establece una cadena
de fuentes de manera que si una fuente esta
disponible procesa el comando y sino, se lo
pasa a la siguiente fuente en la cadena.
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 enlazan
formando una cadena de responsabilidad. Si
una fuente está ocupada se delega en el
siguiente elemento en la cadena.
wc-chain
command
La úl<ma regla refiere a una fuente
de datos que se encarga de operar
cuando las demás han estado
ocupadas
wc-source
{{x}}
wc-chain wc-source
{{x}}
wc-source
ok
ok
busy
busy
Las reglas incluyen un flag
para marcar cuando una
fuente está ocupada
39. @javiervelezreye 39
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
III. Patrones de Distribución
Se requiere operar con un conjunto de fuentes de datos. Sin
embargo, la conexión o el servicio que le da soporte es propenso
a caerse y no ofrece disponibilidad permanente.
El componente wc-retrier reintenta el ataque a
la fuente un número determinado de veces en
caso de fallo para aumentar la probabilidad de
éxito.
Retrier
El componente opera contra una fuente de
datos. Las reglas de configuración indican para
cada <po de comando el número máximo de
intentos (max) y la frecuencia de ataque (ms).
(max) es el número máximo
de intentos a realizar
wc-retrier
command command
wc-source
error
data
cmd #1
error
cmd #2
ok
cmd #3
(ms) es el <empo de
espera entre intentos
El componente <ene
memoria para ges<onar
simultáneamente varios
comandos diferentes
<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 a
evaluar el comando entrante para saber
que criterios de reintento aplicarle
40. @javiervelezreye 40
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
III. Patrones de Distribución
Se requiere operar con un conjunto de fuentes similares bajo un
esquema de compe<ción. Sin embargo, éstas son propensas a
caerse y denegar el servicio durante largo <empo.
El componente wc-circuir-braker detecta estas
fuentes inestables y las desconecta temporal-
mente hasta que vuelven a estar opera<vas.
Circuir Breaker
El componente se configura con un proveedor
y la colección de referencias a fuentes que
debe u<lizar. Para resetear el estado debe
invocarse el método (reset).
wc-circuit-breaker
command
wc-retriers
data
El patrón es en realidad un
balanceador + una colección de
retriers. Cuando un retrier avisa de
error el componente desac<va la
fuente y prueba con la siguiente
error
El error del retrier
hace que se desac<ve
La siguiente fuente ya
opera adecuadamente
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 las
reglas indica el <empo que la
fuente debe estar inaccesible. Por
conveniencia, éste se expresa en
minutos.
42. @javiervelezreye 42
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
IV. Patrones de Transformación
Algunos comandos o datos deben descartarse para que no
lleguen a su obje<vo final. El criterio de filtro depende del
contenido o las condiciones ambientales.
El componente de filtro deja pasar sólo
aquéllos eventos que verifican determinada
propiedad expresada en componentes de
guarda.
Filter
El componente se configura a través de una
colección de reglas que refieren a los
proveedores de guarda. Su criterio se combina
de acuerdo a una lógica AND u OR.
wc-filter
e 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
event
check
check
event
wc-guard wc-target
El filtro consulta a los
componentes de guarda
Cada componente de guarda
valora la conveniencia de
filtrar el evento
El des<no sólo recibe los
eventos que han atravesado
el filtro
Un uso par<cular permite descartar comandos
de escritura repe<dos (idempotencia)
43. @javiervelezreye 43
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
IV. Patrones de Transformación
Algunos comandos o datos deben enriquecerse antes de que
lleguen a su obje<vo final. Los datos a incluir provienen del
estado de otros componentes o condiciones ambientales.
El componente wc-enritcher se encarga de
incluir información en los eventos entrantes a
par<r de datos proporcionados por proveedo-
res de contexto.
Enritcher
El componente se configura a través de una
colección de reglas que refieren a los
proveedores de datos cuyas contribuciones
serán añadidas al evento de salida.
wc-enritcher
e 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
El componente enriquece
el evento entrante para
pasarle datos de otros
componentes
Generador de
iden<ficadores únicos
El token de aplicación y
usuario se almacena
localmente y se añade a
la cabecera
wc-id-factory
wc-session
44. @javiervelezreye 44
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
IV. Patrones de Transformación
Algunos comandos o datos se encuentran en un formato
incompa<ble para ser adecuadamente interpretados por su
des<no. Se requiere una traducción.
El componente wc-translator especifica una
plan<lla de traducción donde se expresa el
formato de salida en función de los datos del
evento de entrada.
Translator
El componente se configura por medio de la
definición de una plan<lla. Cualquiera de las
plan<llas dom- puede u<lizarse.
wc-translator
e e
<wc-translator>
<template>
{ header : {},
body : {
user : [[name]],
pwd : [[password]]
}
}
</template>
</wc-translator>
event event'
El evento a la entrada
representa unos datos en
cierto formato
El traductor expresa los datos del
evento a la salida para acomodarlos
al formato esperado en el des<no
El proceso de traducción
está dirigido por plan<llas
46. @javiervelezreye 46
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
IV. Patrones de Transformación
Algunos de los comandos o datos están expresados a un nivel de
granularidad demasiado bajo y deben ser agregados en una
estructura compuesta.
El componente wc-aggregator se encarga de
realizar una composición de una colección de
eventos atómicos entrantes para generar un
eventos compuesto.
Aggregator
La plan<lla se interpreta en sen<do inverso al
caso anterior. Construye un esquema
complejo desde una colección de items
recolectados en el <empo.
wc-aggregator
e e1 e2 e3
Llegan a lo largo del
<empo eventos atómicos
El componente analiza el iden<fi-
cador de secuencia para saber
cuando emi<r el evento compuesto
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>
48. @javiervelezreye 48
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
VI. Patrones de OpSmización
Algunos comandos de lectura se repiten recurrentemente a lo
largo de la sesión de trabajo lo que provoca una sobrecarga de
las fuentes de datos.
El componente wc-cache es una memoria
intermedia de acceso rápido que descarga de
trabajo a las fuentes cuando el dato se ha
cargado recientemente.
Cache
El componente se configura con un proveedor
de persistencia e información acerca del
<empo de vida que residen los datos en
memoria.
<wc-cache time="30" path="cmd.query">
<wc-session cache-provider/>
</wc-cache>
El parámetro <empo (<me) expresa
el <empo de vida en minutos de los
datos en cache
La ruta (path) dice a la cache
qué dato del comando de
lectura corresponde a la
clave con que se han
persis<do los datos
wc-cache
command
data
data wc-source
read
read
data
read
wc-target
data
No se dispone de los datos
y se consulta la fuente
Ya se dispone de los datos
y se entregan al cliente
data
49. @javiervelezreye 49
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
V. Patrones de OpSmización
Algunas fuentes exponen sus colección de datos de acuerdo a
una lógica de paginación. El acceso a esta información debería
realizarse de forma fluida haciendo transparente dicha lógica.
El componente wc-pager es un apoderado que
permite explorar colecciones paginadas de
forma transparente ofreciendo una sensación
de con<nuidad en los datos.
Pager
El componente paginador se configura
indicando el proveedor de persistencia y el
<empo de vida de las páginas.
<wc-pager time="30"
path="cmd.page"
start="1">
<wc-session cache-provider/>
</wc-pager>
El paginador también funciona como una cache a
nivel de página de manera que sólo consulta la
fuente cuando no dispone de la página en local
En este caso (start) indica
la página de comiendo.
wc-pager
command
data
data wc-source
next
read
data
previous
wc-target
data
data
El comando se encarga de
ges<onar el número de página
y enriquecer el payload
50. @javiervelezreye 50
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
V. Patrones de OpSmización
Algunos <pos de datos requieren un tratamiento transaccional
aunque sus fuentes no lo soporten. Se requiere emular la
transaccionalidad desde el front.
El componente wc-transac<on re<ene el
procesamiento de los comandos entrantes
para que se procesen en bloque sólo a la
llegada de una señal.
TransacSon
El componente transacción se configura
indicando el proveedor de persistencia donde
se acumulan los eventos antes de enviarse.
wc-transacSon
command wc-aggregator
commit
write
write
write
wc-source
write
write
write
write-all
La transacción suele combi-
narse con un agregador para
generar un único paquete de
datos
<wc-transaction>
<wc-session cache-provider/>
<wc-rule when='[[exp]]' commit/>
</wc-transaction>
Todos los comandos se persisten
localmente a la espera de que
llegue una señal explícita de
commit
La expresión (exp) ayuda al
componente a iden<ficar los
comandos que corresponden
a sentencias commit
51. @javiervelezreye 51
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
V. Patrones de OpSmización
Algunas fuentes de datos operan a un ritmo más lento del que
los datos son generados en front. Se requiere un mecanismo
para no saturar a la fuente basado en el descarte de datos.
El componente wc-throele se encarga de
garan<zar que cualquier comando que se
emita demasiado próximo en <empo a otro
anterior sea descartado.
Throele
El componente se configura indicando el
<empo en milisegundos que debe aplicarse
como umbral para descartar eventos.
wc-throele
command wc-target
e1 e1
Se descartan todos aquellos
eventos que llegan con una
frecuencia demasiado rápida
e3
e2
e4
e5
e6
e3
e5 Este patrón se aplica bajo la
hipótesis de que la pérdida de
eventos no es significa<va para el
problema
<wc-throttle ms="[[t]]">
</wc-throttle>
52. @javiervelezreye 52
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
V. Patrones de OpSmización
Algunas fuentes de datos operan a un ritmo más lento del que
los datos son generados en front. Se requiere un mecanismo
para no saturar a la fuente basado en el encolado de datos.
El componente wc-delayer introduce un
retardo temporal fijo en todos los comandos
que provienen desde el front para no saturar a
la fuente.
Delayer
El componente se configura indicando el
<empo en milisegundos que debe retardarse
la propagación de eventos y un proveedor de
persistencia.
wc-delayer
command wc-target
e1 e1
En este caso no se pierden
eventos pero se acomoda la
frecuencia de llegada
e3
e2
e2
e3 Este patrón puede suponer un
cuello de botella ya que los eventos
no se pierden, sólo se retardan
<wc-delayer ms="[[t]]">
<wc-session cache-provider/>
</wc-delayer>
54. @javiervelezreye 54
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
VI. Patrones de Control
Diferentes <pos de fuentes de datos u<lizan dis<ntos protocolos
de acceso. Se requiere abstraer su forma de uso para que operen
de forma homogénea.
Este componente encapsula la complejidad
inherente a un protocolo de uso de una fuente
en un mensaje JSON (comando) que se
propaga como evento en la arquitectura.
Command Provider
El componente se configura definiciendo los
comandos por propiedades e indicando el
contexto donde se evaluan las propiedades (:)
<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. Se ob<ene el
comando por clave
wc-cliente
wc-data-source wc-rest
2. se lanza el comando
en un evento
command hasta la
fuente command
3. La fuente reinterpreta el comando
en una operación de protocolo
post()
55. @javiervelezreye 55
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
VI. Patrones de Control
Dis<ntos datos que llegan desde las fuentes de datos en forma
de eventos deben ser retenidos para poder ser consultados
posteriormente en cualquier momento.
El componente wc-data-port se encarga de dar
acceso a los datos de un canal de eventos en
una propiedad de data-binding.
Data Port
El componente se configura indicando la
fuente de datos (source) a escuchar. El (path)
es la ruta en el evento de datos que determina
en función de (when) donde depositar el dato.
<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
56. @javiervelezreye 56
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
VI. Patrones de Control
Se requiere explorar en profundidad una fuente de datos
orientada a recursos. El progreso de la exploración queda
controlado por propiedades en data-binding.
El componente proporciona un mecanismo
explícito para realizar la exploración contro-
lada por variables y centralizar los comandos
de ataque.
Data Driven Client
El componente se configura con un proveedor
de comandos y una colección de reglas que
indican el avance en la exploración cada vez
que una nueva variable toma valor.
<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-client
command
{{c}}
{{m}} && {{c}}
Se explora en profundidad
un espacio de recursos
Las variables pobladas
determinan el progreso
en la incursión
cinemasmoviessessions
57. @javiervelezreye 57
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
VI. Patrones de Control
Se requiere explorar en profundidad una fuente de datos
orientada a recursos. El progreso de la exploración queda
controlado por eventos.
El componente man<ene el estado de la
navegación y ofrece un mecanismo explícito
de realizar la exploración controlada por
eventos.
Event Driven Client
El componente se configura con un proveedor
de comandos y una colección de reglas que
indican el avance en la exploración cada vez
que llega un nuevo evento.
<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-client
command
e1 (c)
e2 (m) + (c)
Se explora en profundidad
un espacio de recursos
Las variables extraídas del
evento determinan el
progreso en la incursión
cinemasmoviessessions
c
m
58. @javiervelezreye 58
Patrones de Diseño en el Acceso a Datos
Patrones de Acceso a Datos
VI. Patrones de Control
Se requiere explorar una fuente de datos hypermedia. La
exploración queda controlada por un conjunto de eventos que
representan movimientos sobre el grafo de recursos.
El componente man<ene el estado de la
navegación sobre el espacio hypermedia de
recursos y controla su progreso dirigido por
eventos.
Hypermedia Client
El comando sólo requiere una referencia al
estado/recurso inicial. El resto de estados y sus
comandos asociados se extraen de la
respuesta (response).
root
wc-hypermedia-client
command
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>
Cada relación es un comando
cuya estructura está en la
respuesta del comando
anterior
Cada recurso representa un
estado de la aplicación
61. @javiervelezreye 61
El Subsistema de Acceso a Datos en la Prác<ca
Patrones de Acceso a Datos
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. Portal de e-Commerce. Escenario
Selector de
categoría
Sudaderas
Selector de
colección
Slider de
colección
Botón de
pago
Botón de
compra
74. @javiervelezreye 74
Referencias
Patrones de Acceso a Datos
Referencias
La Web Orientada a Componentes
Fecha Noviembre de 2015
Lugar Code Mo<on
Páginas 57
Ref heps://goo.gl/mCxm3w
Componentes Web · Arquitecturas Sovware · Frontend · JavaScript ·
Composición · Encapsulación · Reu<lización · Buenas Prác<cas ·
Principios de Diseño · Errores comunes
Principios de Diseño en Componentes Web
Fecha Marzo de 2015
Lugar Polymer Madrid
Páginas 170
Ref heps://goo.gl/t0GpVS
Programación Orientada a Componentes · Principios de Diseño ·
Buenas Prác<cas · Recomendaciones de Diseño y Desarrollo ·
Técnicas de Programación de Componentes Web · Polymer