21

¿Existe un sistema estándar o convencional para organizar los programas Ruby de varios archivos? Me he embarcado en mi primer gran "proyecto" en Ruby, un programa de búsqueda que está lógicamente organizado en múltiples archivos y directorios. Yo he descrito a mi potencial estructura:Sistema para organizar programas de Ruby de varios archivos?

  • El archivo principal. Este archivo implementa la clase de búsqueda y el protocolo de búsqueda general.
  • El archivo de análisis algorítmico. Este archivo implementa funciones que interpretan resultados de búsqueda. directorio
  • Protocolos
    • Contiene un archivo por cada protocolo para la búsqueda.
  • Feeds Directorio
    • Parte del propósito del programa es buscar canales de noticias archivados. Los archivos para esta característica van en esta carpeta.

Sin embargo, el código tiene actualmente una clase (vamos a llamarlo buscador) que clase de búsqueda de cada protocolo hereda de (GoogleSearcher < buscador). Para gestionar esto, necesito incluir el archivo principal en estos archivos de protocolo (¿no?), Lo que no parece posible dada mi estructura ideal.

Aparte de mi ejemplo específico, me preguntaba si hay convenciones, como "más archivos en lugar de menos", o "la estructuración lógica de los archivos es innecesaria". ¿Es común tener un archivo de funciones de "ayuda" (como en Rails?) ¿Qué nivel de abstracción se considera apropiado?

Finalmente, estoy planeando integrar esto en Rails algún día como una biblioteca (no como un complemento, también quiero que funcione de manera independiente). No sé si esto afectaría a la organización.

Sé que esta es una pregunta bastante abierta, pero es porque agradecería cualquier consejo que sea remotamente relevante. Gracias por adelantado.

Respuesta

11

Es posible que desee considerar la creación de una joya para su biblioteca. Esto facilitaría el uso de la biblioteca, tanto independiente como con Rails, y simplificaría la implementación y las actualizaciones.

Además, como las gemas normalmente siguen una estructura de directorio específica, también resuelve el problema de no saber cómo organizar la biblioteca.

Hay mucha documentación disponible para crear gemas. Here es un poco más información sobre la estructura del archivo, así como otros consejos útiles.

+0

hay algunas herramientas geniales de generación de gemas: newgem, Jeweler, bones. Utilicé newgem para un proyecto (que en realidad NO estaba destinado a ser lanzado como una gema) y funcionó bastante bien – RyanWilcox

+0

Esto es bueno, y solo deja una pregunta sin respuesta (en retrospectiva, esta pregunta era definitivamente demasiado amplia). ¿Hay alguna pregunta? una forma de tener herencia de clases en varios archivos, donde la clase principal se encuentra en el archivo principal y las clases que heredan de ella están en archivos de la periferia en un subdirectorio? ¿O es una organización al revés? –

+0

Ruby es bastante indulgente en lo que respecta a la herencia. Si entiendo tu pregunta correctamente, definitivamente sería posible configurarla como describes. Sin conocer detalles de su proyecto, probablemente haga lo mismo cuando una "clase principal" esté en el directorio lib/foo/y las clases que hereden de la clase principal estén en lib/foo/bar, lib/foo/baz y así. Echa un vistazo a gemas como Nokogiri para ver ejemplos en vivo de este tipo de configuración. – vonconrad

0

Si desea integrarse con Rails, es probable que desee crear un complemento.

Esta guía puede ser un buen lugar para empezar: http://guides.rubyonrails.org/plugins.html

+0

Interesante, pero no creo que quiera tanta integración de Rails. (Particularmente porque no soy exactamente un experto en Rails). Creo que simplemente lo usaré como una biblioteca. Tener una solicitud actualizada para aclarar –

2

Es posible que desee echar un vistazo a Ideal ruby project structure junto con los consejos de vonconrad. Una joya definitivamente sería un buen lugar para comenzar y una carrera a través del rubygems documentation oficial también podría ser beneficioso.

8

Además de los enlaces recomendados en la respuesta de vonconrad, puede consultar la sección "Organizar su fuente" en el Capítulo 16 de Programing Ruby 1.9 de Dave Thomas et al. Hay un free sample PDF of that part of the book.

El capítulo menciona:

16.1 espacios de nombres Ya hemos hablado de manera que Ruby le ayuda a gestionar los nombres de las cosas en sus programas. Si ustedes, de los métodos de fi ne o constantes en una clase, Ruby asegura que sus nombres pueden ser solamente utilizan en el contexto de esa clase

16,2 Organización de la Fuente Pequeño, auto-contenida scripts pueden estar en un solo archivo ... programas más grandes deben considerar el sistema RubyGems

anagram/ <- top-level 
    bin/ <- command-line interface goes here 
    lib/ <- three library files go here 
    test/ <- test files go here 
0

Sé que esta pregunta es bastante antiguo, pero se espera que sea de utilidad para los que vienen detrás ...

Estoy de acuerdo con lo que se ha dicho más arriba: las gemas son una gran manera de organizar y reutilizar el código. Además de los enlaces de arriba, te recomiendo el uso de Bündler para crear gemas como se indica en este Ryan Bates Railscast: http://railscasts.com/episodes/245-new-gem-with-bundler

encuentro que Bündler hace que la creación de piedras preciosas y un mantenimiento muy sencillo.

En cuanto a la herencia, compruebe cómo Ruby mixins se puede usar para encapsular y reutilizar el código en jerarquías de clases dispares. http://ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html

Cuestiones relacionadas