Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby como herramienta de guerrila en el mundo "enterprise"

Nando Sola
November 28, 2013

Ruby como herramienta de guerrila en el mundo "enterprise"

En esta charla explico las motivaciones que hay detrás de una aplicación “enterprise” en Ruby y por qué no todo debe tratarse como un “CRUD”. En estas tierras áridas, ni Rails ni ActiveRecord serán de mucha ayuda.

http://www.meetup.com/Zaragoza-Ruby-Jam-Sessions/events/152199912/

Nando Sola

November 28, 2013
Tweet

More Decks by Nando Sola

Other Decks in Technology

Transcript

  1. Ruby como herramienta de guerrilla en el mundo ‘Enterprise’ ¡100%

    libre de XML! Zaragoza Ruby Jam Sessions. Diciembre de 2013
  2. ¿Qué no es Enterprise? Java EE Spring .NET XML SOA

    http://rubygems.org/gems/enterprise
  3. Enterprise es… Una manera de modelar aplicaciones complejas Datos persistentes

    Acceso concurrente y transacciones ¡Formularios! Integración con sistemas externos Lógica de negocio y “casos especiales”
  4. La Comunidad Ruby se usa cada vez en más sitios

    En dominios cada vez más complejos Cada vez más gente se interesa por Ruby Subiendo por la ladera de la iluminación Martin Fowler, Uncle Bob, Sandi Metz, …
  5. ¿Cómo puedo hacer mejor las cosas? Abrazando la orientación a

    objetos Conociendo los patrones Scrum + XP = metodología + prácticas Simplificando el diseño Aplicando SOLID*
  6. Nuestro dominio El mundo de los transitarios Las operaciones duran

    meses Leyes aduaneras Tarifas, contabilidad, facturación ¡Impresoras matriciales! Los corsarios del S.XXI
  7. Primera iteración Scuby Scala/Swing Jersey MySQL DSL XMPP PubSub JRuby

    MongoDB Abstract! Data! Channel! +! searches EJB Sinatra! Process engine ActiveResource JPA MongoDB MySQL storage config! persistent queues Glassfish
  8. Arquitectura Enterprise Interfaz gráfico Aplicación Infraestructura Cada capa sólo conoce

    lo que tiene por debajo Requisitos muy cambiantes Requisitos poco cambiantes
  9. Consultas No es un dominio “enterprise” Apenas cambia. Consultas a

    la bbdd: no hay lógica de negocio GET /search/operadores/?delegacion.prov=zaragoza GET /autocomplete/operadores/?token=zar
  10. Actividades simples (CRUD) POST /operador Se crean/recuperan todos los objetos

    con los que se va a interactuar Se registran dentro de una transacción pesimista PUT /transactions/:uuid/update PUT /transactions/:uuid/save
  11. Actividades workflow Lanzadas desde actividades simples, bajo determinadas condiciones Llevan

    asociadas procesos de checklist Interactúan asíncronamente con los usuarios
  12. La parte Enterprise :uuid :uuid Registry Transacción pesimista a_foo a_bar

    a_baz a_foo a_baz a_bat dirty new clean clean dirty new Tracked Objs Mapper Mapper Transacción optimista
  13. Entidades Definidas mediante un DSL Jerarquía de objetos “puros” No

    saben nada acerca de persistencia Llevan asociados finders El mapper serializa entidades a la bbdd Siempre válidas y consistentes
  14. Atributos Tipos básicos Ruby Tipos que extienden a los tipos

    básicos Password::BCrypt < String Otras entidades Referencias Value Objects
  15. Value objects Compuestos de varios atributos Pueden ser inmutables Su

    identidad no importa ¡Pero en la bbdd tienen id! Podrían ser composite PKs Podrían estar en un YAML Estamos trabajando en ello, capitán
  16. Modela objetos, no tablas Usuario Empresa Delegación Dirección Dpto. UsuDept

    UsuPerm Acción * * * * * * 1 DepPerm Acción * * Usuarios Empresas Contexto Contexto
  17. Modela objetos, no tablas ¿Cómo se relacionan mis objetos? ¡El

    Cliente lo sabe mejor que tú! ¿Quién es el objeto responsable de mantener la jerarquía? Relaciones entre contextos La ley de la frontera
  18. Ruby + Enterprise Frameworks muy dependientes del patrón Active Record

    AR, DataMapper “ORM o nada” Datamapper 4, Ruby Object Mapper Muy prometedores
  19. Ruby + Enterprise Concisión, rapidez de implementación Acceso a bajo

    nivel a la BBDD SQL crudo sequel-datasets ¿rails/arel? Herramientas interesantes tsort en la librería estándar Inmutabilidad