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

Ruby como herramienta de guerrilla en el mundo ...

Ruby como herramienta de guerrilla en el mundo ‘Enterprise‘

Presentado en: http://www.meetup.com/Zaragoza-Ruby-Jam-Sessions/events/152199912/
Autor: Nando Sola, aka @mr_solo
About: Soy socio fundador de dos start-ups, desarrollo full-time en JRuby desde hace 5 años, coordino @MadridJUG y soy adicto a la achicoria. En otra vida me dediqué a proyectos de integración de sistemas y labores de sysadmin. También llamo “vi” a “vim”.
Título: “Ruby como herramienta de guerrilla en el mundo ‘Enterprise'“
Idioma: Español
Slides: Español

En esta charla explicaré 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.

Afortunadamente, dentro de las comunidades Java, .NET o incluso SmallTalk hay bastante literatura y ejemplos sobre cómo abordar problemas de modelado de aplicaciones complejas. Desde hace relativamente poco, estos patrones y prácticas tan establecidas en esas otras comunidades, se están empezando a aplicar a Ruby con resultados muy productivos e interesantes. Desde cosas tan (aparentemente) simples como la orientación a objetos basada en patrones, hasta grandes paradigmas de diseño como DDD.

El enfoque de la charla será 99.9% práctico y un 0.1% mágico. Os contaré cómo nuestra aplicación REST de backend, basada en Sinatra, usa transacciones, puede manejar varios tipos de concurrencia y persiste a la base de datos. ¡Y todo sin que las entidades se enteren!

Por último, os desvelaré el motivo real de la charla: buscar colaboradores para ayudarme a mantener y desarrollar el proyecto “sequel-uow”, que es la pieza de código que me está ayudando a aprender todos estos conceptos de los que os he hablado y que desconocía hasta hace tan sólo un año. Yo también soy un principiante y quería tener un proyecto para poder “hacer las cosas mejor” en nuestra aplicación. El proyecto avanza a medida que la aplicación lo necesita; no es perfecto ni quiero que lo sea. Faltan muchas cosas, los tests son un caos y probablemente no deberías usarlo todavía.

A no ser, claro, que te interese que aprendamos juntos patrones de diseño, orientación a objetos, refactoring, TDD, DDD y muchas cosas de las que se habla ahora en nuestra comunidad Ruby.

Zaragoza Ruby Jam Sessions

November 28, 2013
Tweet

More Decks by Zaragoza Ruby Jam Sessions

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