21

Gibt es ein Standard- oder konventionelles System zum Organisieren von Ruby-Programmen mit mehreren Dateien? Ich habe mein erstes großes "Projekt" in Ruby gestartet, einem Suchprogramm, das logisch in mehrere Dateien und Verzeichnisse unterteilt ist. Ich habe unter meinem Potenzial Struktur skizziert:System zum Organisieren von Ruby-Programmen mit mehreren Dateien?

  • Die Hauptdatei. Diese Datei implementiert die Suchklasse und das allgemeine Suchprotokoll.
  • Die algorithmische Analysedatei. Diese Datei implementiert Funktionen, die Suchergebnisse interpretieren.
  • Protokolle Verzeichnis
    • Enthält eine Datei pro-Protokoll zu suchen.
  • Feeds Verzeichnis
    • Ein Teil der Zweck des Programms ist die archivierten Nachrichten-Feeds zu suchen. Die Dateien für dieses Feature werden in diesem Ordner gespeichert.

jedoch zur Zeit der Code eine Klasse hat (wir es Searcher nennen), dass jeder Suchklasse Protokoll erbt von (GoogleSearcher < Searcher). Um dies zu verwalten, muss ich die Hauptdatei in diese Protokolldateien aufnehmen (richtig?), Was bei meiner idealen Struktur nicht möglich scheint.

Abgesehen von meinem spezifischen Beispiel, habe ich mich gefragt, ob es Konventionen gibt, wie "mehr Dateien statt weniger", oder "logische Strukturierung von Dateien ist unnötig". Ist es üblich, eine Datei mit "Helfer" -Funktionen zu haben (wie in Rails?) Welches Abstraktionsniveau wird als angemessen angesehen?

Schließlich plane ich die Integration in Rails eines Tages als eine Bibliothek (kein Plugin; ich will, dass es auch eigenständig funktioniert). Ich weiß nicht, ob das die Organisation beeinflussen würde.

Ich weiß, dass dies eine ziemlich offene Frage ist, aber das liegt daran, dass ich jeden Ratschlag, der aus der Ferne relevant ist, zu schätzen weiß. Danke im Voraus.

Antwort

11

Sie betrachten wünschen können, ein Juwel für Ihre Bibliothek zu schaffen. Dies würde es einfacher machen, die Bibliothek sowohl eigenständig als auch mit Rails zu verwenden und die Bereitstellung/Aktualisierung zu vereinfachen.

Da Edelsteine ​​normalerweise einer bestimmten Verzeichnisstruktur folgen, löst es außerdem Ihr Problem, nicht zu wissen, wie die Bibliothek zu organisieren ist.

Es gibt genügend Dokumentation, um Edelsteine ​​zu erstellen. Here ist ein bisschen mehr Informationen über Dateistruktur, sowie andere nützliche Tipps.

+0

gibt es ein paar ordentliche Edelstein erzeugenden Werkzeuge: Newgem, Juwelier, Knochen. Ich habe Newgem für ein Projekt verwendet (das eigentlich NICHT als Edelstein veröffentlicht werden sollte) und es hat ziemlich gut funktioniert – RyanWilcox

+0

Das ist gut, und es bleibt nur eine unbeantwortete Frage (im Nachhinein war diese Frage definitiv zu weit.) Gibt es eine Möglichkeit, eine Klassenvererbung über mehrere Dateien hinweg durchzuführen, wobei sich die Hauptklasse in der Hauptdatei befindet und Klassen, die von ihr erben, in Peripheriedateien in einem Unterverzeichnis enthalten sind? Oder ist das eine rückwärts gerichtete Organisation? –

+0

Ruby ist ziemlich vergebend, wenn es um Vererbung geht. Wenn ich Ihre Frage richtig verstehe, wäre es definitiv möglich, sie so einzurichten, wie Sie es beschreiben. Ohne irgendwelche Einzelheiten Ihres Projekts zu kennen, würde ich wahrscheinlich dasselbe tun, wo eine "Hauptklasse" im lib/foo/-Verzeichnis und Klassen, die von der Hauptklasse erben, in lib/foo/bar, lib/foo/baz sind und so weiter. Werfen Sie einen Blick auf Edelsteine ​​wie Nokogiri für Live-Beispiele dieser Art von Setup. – vonconrad

0

Wenn Sie mit Rails integrieren möchten, werden Sie wahrscheinlich ein Plugin erstellen wollen.

Dieser Leitfaden könnte ein guter Anfang sein: http://guides.rubyonrails.org/plugins.html

+0

Interessant, aber ich glaube nicht, dass ich so tief eine Integration von Rails will. (Zumal ich nicht gerade ein Rails-Experte bin). Ich denke, ich werde es stattdessen als eine Bibliothek verwenden. Aktualisierte Anfrage zur Klärung –

8

Neben den empfohlenen Links in der Antwort von vonconrad können Sie auf den Abschnitt "Organisieren Ihrer Quelle" in Kapitel 16 von Programing Ruby 1.9 von Dave Thomas et al. Es gibt eine free sample PDF of that part of the book.

Das Kapitel erwähnt:

16,1 Namespaces Wir haben bereits einen Weg begegnet, die Ruby hilft Ihnen, die Namen der Dinge in Ihren Programmen zu verwalten. Wenn Sie de fi nieren Methoden oder Konstanten in einer Klasse, stellt sicher, Rubin, dass ihre Namen nur diese Klasse im Kontext verwendet werden können

16,2 Organisieren Quelle Klein, self-contained Skripte können größere Programme in einer einzigen fi le ... sollte das RubyGems System

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

Ich weiß, diese Frage ist ziemlich alt, aber hoffentlich von Nutzen diejenigen, die nach ihnen kommen ...

ich mit einverstanden, was oben gesagt worden ist: Edelstein eine gute Möglichkeit, und Wiederverwendung von Code zu organisieren. Zusätzlich zu den oben aufgeführten Links kann ich Bündler empfehlen die Verwendung von Edelsteinen zu schaffen, wie in diesem Ryan Bates skizzierte Railscast: http://railscasts.com/episodes/245-new-gem-with-bundler

Ich finde, dass Bündler gem Erstellung und Wartung sehr einfach macht.

In Bezug auf Vererbung, überprüfen Sie, wie Ruby Mixins verwendet werden können, um Code über unterschiedliche Klassenhierarchien zu verkapseln und wiederverwenden. http://ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html

Verwandte Themen