Arquitecturas que Crecen y
Arquitecturas que No
Agustín Ramos Fonseca
¿Qué es Arquitectura?
¿De qué formas puede crecer un
sistema de software?
En la cantidad de…
Usuarios que lo usan
Datos que maneja.
Transacciones que procesa.
Funcionalidad que implementa.
Contextos en los que es usado.
Plataformas que soporta.
Metáforas
Un Organismo Vivo
El proceso biológico que lleva a un organismo a desarrollar su forma característica.
Morfogénesis
Se origina (una célula)
Se forma
Madura
Cambia constantemente.
Alcanza la vejez, y muere.
...¿Puede crearse software así?
¿Qué beneficios traería?
Ciclo de vida
Especialización y
restricciones
En las etapas embrionarias, muchas
criaturas son muy parecidas.
Conforme pasa el tiempo, se dan
eventos que dan forma y restringen el
conjunto de eventos que pueden
ocurrir despues, así como las formas
que se pueden alcanzar...
En software… ¿por qué tomar
decisiones anticipadas?
Especialización y
restricciones
El desarrollo depende del
contexto
En software… ¿Cuál es el contexto adecuado?
El entorno socio-económico y tecnológico en el cual se inserta… ¿Moraleja?
¡Release It!
Diseño de Lenguajes
¿Qué constituye un lenguaje?
Un vocabulario
if, for, public, myVar
Una sintaxis
válido: public void do() {}
Inválido: void public do() {}
Una semántica
Dos extremos
Lenguajes con muchas características
(Muy completos).
◦ Un amplio vocabulario.
◦ Una sintaxis muy elaborada.
Lenguajes pequeños pero extensibles.
¿Cuál es mejor?
Growing a Language
Guy Steele, OOPSLA 1998
“A language design can no longer be a thing. It must be a pattern—a pattern for growth—a pattern for growing the pattern for defining the patterns that programmers can use for their real work and their main
goal.”
“So I think the sole way to win is to plan for growth with help from users... Parts of the
language must be designed to help the task of growth. “
Christopher Alexander
y las 15 propiedades
No comprendimos a
Alexander Él hablaba de esto.
No comprendimos a
Alexander Pero interpretamos esto
Esto no puede crecer
Por eso reformuló su teoría
“The Nature of Order” (4 tomos)
"living structure, wherever it appears, is
composed of fundamental structural
features
-- roughly fifteen of them, at least."
Las 15 propiedades
1. Levels of scale.
2. Strong centers.
3. Boundaries.
4. Alternating repetition.
5. Positive space.
6. Good shape.
7. Local symmetries.
8. Deep interlock and ambiguity. .
9. Contrast.
10. Gradients.
11. Roughness.
12. Echoes.
13. The Void.
14. Simplicity and Inner Calm.
15. Not-separateness.
Ejemplo: Niveles de Escala
En software
Una arquitectura micro-kernel
Principios
Modularización
Sin una buena modularización, los sistemasson rígidos (difíciles de cambiar).
¿Qué es una buena modularización?
◦ Modularización Efectiva
http://slidesha.re/9siQFY
◦ Modular Architecture
http://modularity.kirkk.com/
Diseña explícitamente tus módulos, y cuidaque las propiedades esperadas de ellos se mantengan.
Ortogonalidad
Las responsabilidades de los
componentes deben tener fronteras
bien definidas.
Solo de esta manera se logra la
flexibilidad y reversibilidad requerida.
Decisiones Reversibles
Cuando se toma una decisión
tecnológica, es necesario evaluar si
esta podría cambiar en un futuro. De
ser así debemos introducir los
mecanismos necesarios para lograr
revertir la decisión.
◦ Abstracciones.
◦ Componentes débilmente acoplados.
◦ Intermediarios (Adapter, Proxy, etc)
Patrones Arquitectónicos
CQRS
Command Query Responsibility
Segregation
Actores
No hay un solo hilo de control.
“Objetos” que se comunican con mensajesasíncronos.
No hay estado compartido.
Cuando un mensaje es recibido, un actor puede◦ Cambiar su estado interno.
◦ Crear más actores.
◦ Enviar más mensajes
¿Qué ofrece?◦ Escalabilidad. Es un modelo natural de cómputo
distribuido.
◦ Tolerancia a fallas. Cuando un actor no funciona, se crea uno nuevo en su lugar.
Actores
¿Con qué experimentar?
◦ Erlang
◦ Scala
◦ Akka (librería Java)
◦ Gpars (Groovy)