¿Cómo puedo implementar el patrón Repository o Gateway en Ruby?Repositorio o patrón de puerta de enlace en Ruby
Vengo de un mundo C# y generalmente abstraigo mi acceso a los datos, pero con ActiveRecord como el mecanismo de acceso a datos predeterminado en Ruby, no es obvio cómo lograr eso.
Lo que normalmente haría en C# es el trabajo con los interfaces abstractas y luego tener una aplicación concreta para EFCustomerRepository
, NHibernateCustomerRepository
y InMemoryCustomerRepository
y dependiendo de la situación me inyecto la aplicación concreta a juego.
Así que ahora, ¿cuál es la forma de Ruby?
Por lo que yo entiendo, en idiomas dinámicos no necesitaría algo como DI (inyección de dependencia). Y Ruby tiene poderosas funciones de lenguaje para permitir cosas como mixins.
¿Pero definiría la mezcla para usar estáticamente en clase o nivel de módulo?
¿Cómo escribo mi lógica de negocio si deseo desarrollarme en un repositorio en memoria y en producción cambiaría a mi ActiveRecord-Repository?
Si puede estar en el camino equivocado aquí ya que estoy acostumbrado a pensar en un lenguaje estáticamente tipado. ¿Cómo alguien abordaría esta tarea al estilo Ruby? Básicamente quiero hacer que mi capa de persistencia sea abstracta y sus implementaciones intercambiables.
EDIT: Me refiero a robert c. martins (unclebob) keynote about architecture
Gracias por cualquier ayuda ...
http://lancecarlson.github.com/2012/05/15/dci-and-decoupling-business-logic-from-ruby-on-rails.html esto es algo que alguien hizo como respuesta al artículo del Tío Bob. Más por venir. – SpoBo
También estoy buscando una gema que implemente el patrón de repositorio. – Andrew