Mi objetivo es definir contratos entre clases.
Me gusta escribir pato y todo, pero también me gustaría definir una interfaz entre las diferentes capas de mi aplicación para definir claramente cuáles son los métodos para llamar desde el exterior y cuáles son métodos accesorios que no deberían ser utilizados por la otra capa .
Por ejemplo, en Java puedo definir una interfaz Persistor con métodos como get () y save () y luego definir una clase JdbcPersistor con todos los métodos que necesito para persistir en la base de datos. Y quizás otro RestPersistor con otros métodos para guardar en un servidor remoto.
No estoy pidiendo interfaces en Ruby, solo para saber si hay una forma ordenada de mantener esta distinción. Me gusta Ruby pero solo trabajé en pequeños proyectos con él.
fuente
Respuestas:
Esto se respondió en el contexto de las interfaces de C # y Ruby en stackoverflow: /programming/3505521/in-ruby-what-is-the-equivalent-to-an-interface-in-c .
Resumido: no hay un equivalente exacto en Ruby, ya que la escritura de pato hace innecesaria una interfaz formal. En su lugar, considere probar el cumplimiento de una "interfaz" o contrato mediante
respond_to?
.fuente
Algunos lenguajes de tipo dinámico tienen interfaces o un concepto similar. Por ejemplo, Objective-C tiene protocolos. Pero la mayoría no. Para ser eficaz en un lenguaje dinámico, debe olvidar lo que sabe sobre los idiomas de tipo estático, adoptar la naturaleza dinámica del lenguaje. Los lenguajes de tipo dinámico generalmente evitan el uso de interfaces.
fuente
En Perl 5, tanto Moose como Moo proporcionan roles (o rasgos) que pueden requerir la implementación de ciertos métodos. Moose también viene con un sistema de tipo de tiempo de ejecución que le permite definir un
duck_type
, que es un tipo que declara objetos que tienen un conjunto requerido de métodos.Los roles son implementados por las clases (u otros roles), y también proporcionan implementación y comportamiento, no solo la interfaz. Pero también (al menos en Moose) manejan cosas como la detección de conflictos de métodos.
fuente