23

複数ファイルのRubyプログラムを編成するための標準または従来のシステムはありますか? Ruby で最初の大規模な「プロジェクト」に着手しました。これは、複数のファイルとディレクトリに論理的に編成された検索プログラムです。潜在的な構造を以下に概説しました。

  • メインファイル. このファイルは、検索クラスと一般的な検索プロトコルを実装します。
  • アルゴリズム分析ファイル。このファイルは、検索結果を解釈する関数を実装します。
  • プロトコル ディレクトリ
    • 検索するプロトコルごとに 1 つのファイルが含まれます。
  • フィード ディレクトリ
    • プログラムの目的の一部は、アーカイブされたニュース フィードを検索することです。この機能のファイルは、このフォルダーに格納されます。

ただし、コードには現在、各プロトコルの検索クラスが継承するクラス (Searcher と呼びましょう) があります (GoogleSearcher < Searcher)。これを管理するには、これらのプロトコル ファイルにメイン ファイルを含める必要があります (そうですか?)。私の理想的な構造では、これは不可能に思えます。

私の具体的な例は別として、「ファイルを減らすのではなく増やす」、「ファイルの論理的な構造化は不要」などの規則があるかどうか疑問に思っていました。「ヘルパー」関数のファイルを用意するのは一般的ですか (Rails など)?どのレベルの抽象化が適切と考えられますか?

最後に、いつかこれをライブラリとして Rails に統合する予定です (プラグインではなく、スタンドアロンでも動作するようにしたい)。これが組織に影響を与えるかどうかはわかりません。

これはかなり自由回答の質問であることは承知していますが、それは、関連性の低いアドバイスをいただければ幸いです。前もって感謝します。

4

5 に答える 5

8

vonconrad's Answerの推奨リンクに加えて、Dave ThomasetalによるRuby1.9のプログラミングの第16章の「ソースの整理」のセクションを参照できます本のその部分の無料サンプルPDFがあります。

この章では次のように述べています。

16.1名前空間Rubyがプログラム内の物の名前を管理するのに役立つ方法にすでに遭遇しました。クラスでメソッドまたは定数を定義する場合、Rubyは、それらの名前がそのクラスのコンテキストでのみ使用できることを保証します

  

16.2ソースの整理小さな自己完結型のスクリプトを1つのファイルに含めることができます...より大きなプログラムではRubyGemsシステムを検討する必要があります

anagram/ <- top-level
  bin/ <- command-line interface goes here
  lib/ <- three library files go here
  test/ <- test files go here
于 2011-05-20T06:34:21.120 に答える
2

vonconrad のアドバイスと併せて、Ideal ruby​​ project structure を参照してください。gem は間違いなく開始するのに適した場所であり、公式のruby​​gems ドキュメントを実行することも有益な場合があります。

于 2010-01-05T02:54:35.863 に答える
0

この質問はかなり古いことは知っていますが、後で来る人に役立つことを願っています...

上記の内容に同意します。gem は、コードを整理して再利用する優れた方法です。上記のリンクに加えて、Ryan Bates RailsCast: http://railscasts.com/episodes/245-new-gem-with-bundlerで説明されているように、Bundler を使用して gem を作成することをお勧めします。

Bundler を使用すると、gem の作成とメンテナンスが非常に簡単になります。

継承に関しては、Ruby ミックスインを使用して、異なるクラス階層間でコードをカプセル化し、再利用する方法を確認してください。http://ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html

于 2011-12-11T22:49:24.047 に答える
0

Rails と統合したい場合は、おそらくプラグインを作成する必要があります。

このガイドは、開始するのに適した場所かもしれません: http://guides.rubyonrails.org/plugins.html

于 2010-01-04T19:07:59.707 に答える