21

Esiste un sistema standard o convenzionale per l'organizzazione di programmi Ruby multi-file? Ho intrapreso il mio primo grande "progetto" in Ruby, un programma di ricerca che è logicamente organizzato in più file e directory. Ho delineato sotto la mia struttura potenzialità:Sistema per l'organizzazione di programmi Ruby multi-file?

  • Il file principale. Questo file implementa la classe di ricerca e il protocollo di ricerca generale.
  • Il file di analisi algoritmica. Questo file implementa funzioni che interpretano i risultati della ricerca. directory
  • protocolli
    • Contiene un file per ogni protocollo per la ricerca.
  • Feed Directory
    • Parte dello scopo del programma è quello di cercare le notizie archiviato feed. I file per questa funzione vanno in questa cartella.

Tuttavia, il codice ha attualmente una classe (chiamiamolo Searcher), che di ogni protocollo classe di ricerca eredita da (GoogleSearcher < Searcher). Per gestirlo, ho bisogno di includere il file principale in questi file di protocollo (giusto?) Che non sembra possibile data la mia struttura ideale.

Oltre al mio esempio specifico, mi chiedevo se esistessero convenzioni quali "più file anziché meno" o "la struttura logica dei file non è necessaria". È comune avere un file di funzioni "helper" (come in Rails?) Quale livello di astrazione è considerato appropriato?

Infine, ho intenzione di integrarlo in Rails un giorno come una libreria (non un plug-in, ma voglio che funzioni anche da solo). Non so se questo influenzerebbe l'organizzazione.

So che questa è una domanda abbastanza aperta, ma è perché apprezzerei qualsiasi consiglio che sia pertinente in remoto. Grazie in anticipo.

risposta

11

Si può prendere in considerazione la creazione di un gioiello per la vostra biblioteca. Ciò renderebbe facile l'uso della libreria sia stand-alone che con Rails, oltre a semplificare la distribuzione/gli aggiornamenti.

Inoltre, poiché le gemme normalmente seguono una specifica struttura di directory, risolve anche il problema di non sapere come organizzare la libreria.

C'è abbondanza di documentazione disponibile per la creazione di gemme. Here un po 'più di informazioni sulla struttura del file, così come altri suggerimenti utili.

+0

ci sono alcuni semplici strumenti per la generazione di gemme: newgem, gioielliere, ossa. Ho usato newgem per un progetto (che in realtà NON intendeva essere rilasciato come gemma) e ha funzionato abbastanza bene – RyanWilcox

+0

Questo è buono, e lascia solo una domanda senza risposta (in retrospettiva, questa domanda era decisamente troppo ampia.) Esiste un modo per avere un'ereditarietà di classe su più file, dove la classe principale è nel file principale e le classi che ne ereditano sono in file periferici in una sottodirectory? O è un'organizzazione arretrata? –

+0

Ruby è piuttosto clemente quando si tratta di ereditarietà. Se capisco correttamente la tua domanda, sarebbe sicuramente possibile configurarla come descrivi. Senza conoscere alcun particolare del tuo progetto, probabilmente farei la stessa cosa dove una "main class" è nella directory lib/foo/e le classi che ereditano dalla classe principale sono in lib/foo/bar, lib/foo/baz e così via. Dai un'occhiata a gemme come Nokogiri per esempi dal vivo di questo tipo di installazione. – vonconrad

0

Se si desidera integrare con Rails, è probabile che si desideri creare un plug-in.

Questa guida potrebbe essere un buon punto di partenza: http://guides.rubyonrails.org/plugins.html

+0

Interessante, ma non credo di volere un'integrazione profonda di Rails. (Soprattutto perché non sono esattamente un esperto di Rails). Penso che lo userò semplicemente come libreria. Ho una richiesta aggiornata per chiarire. –

8

Oltre ai collegamenti consigliati nella risposta di vonconrad, è possibile fare riferimento alla sezione "Organizzazione della fonte" nel capitolo 16 di Programing Ruby 1.9 di Dave Thomas et al. C'è un free sample PDF of that part of the book.

Il capitolo parla:

16.1 Namespace Si è già avuto modo che Ruby consente di gestire i nomi delle cose nei vostri programmi. Se voi de metodi fi ne o costanti in una classe, Ruby assicura che i loro nomi possono essere utilizzati solo nel contesto di quella classe

16,2 Organizzare la vostra fonte Piccolo, autosufficiente script possono essere in un singolo fi alle ... programmi più grandi dovrebbero prendere in considerazione il sistema RubyGems

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

So che questa domanda è abbastanza vecchio, ma si spera essere utile a coloro che verranno dopo ...

Sono d'accordo con ciò che è stato detto sopra: gemme sono un ottimo modo per organizzare e riutilizzare il codice. Oltre ai link di cui sopra, potrebbe mi consiglia di utilizzare Bundler per creare gemme come indicato in questo Ryan Bates Railscast: http://railscasts.com/episodes/245-new-gem-with-bundler

trovo che Bundler rende la creazione e la manutenzione molto semplice gioiello.

Per quanto riguarda l'ereditarietà, controllare come è possibile utilizzare i mixin Ruby per incapsulare e riutilizzare il codice attraverso gerarchie di classi disparate. http://ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html

Problemi correlati