System do organizowania programów Wielotematycznych?

Czy istnieje standardowy lub konwencjonalny system do organizowania programów Ruby z wieloma plikami? Rozpocząłem swój pierwszy duży "projekt" w Ruby, programie do wyszukiwania, który jest logicznie zorganizowany w wiele plików i katalogów. Poniżej przedstawiam moją potencjalną strukturę:

  • Plik główny . Plik ten implementuje klasę wyszukiwania i ogólny protokół wyszukiwania.
  • Plik analizy algorytmicznej . Ten plik implementuje funkcje interpretujące wyszukiwanie wyniki.
  • Katalog protokołów
    • zawiera jeden plik na protokół do przeszukiwania.
  • Katalog Kanałów
    • Celem programu jest wyszukiwanie zarchiwizowanych kanałów informacyjnych. Pliki tej funkcji znajdują się w tym folderze.

Jednakże, kod obecnie posiada klasę (nazwijmy ją Searcher), od której każda klasa protokołu jest dziedziczona (GoogleSearcher

Pomijając mój konkretny przykład, zastanawiałem się, czy istnieją jakieś konwencje, takie jak "więcej plików zamiast mniej" lub "logiczna struktura plików jest niepotrzebna". Czy wspólne jest posiadanie pliku funkcji "helper" (np. w Rails?) Jaki poziom abstrakcji jest uważany za właściwy?

W końcu planuję kiedyś zintegrować to z Rails jako bibliotekę (nie plugin; Chcę, aby działał również samodzielnie). Nie wiem, czy to wpłynie na organizację.

Wiem, że to dość otwarte pytanie, ale to dlatego, że byłbym wdzięczny za każdą radę, która jest zdalnie istotna. Z góry dzięki.

Author: Ilia Frenkel, 2010-01-04

5 answers

Możesz rozważyć stworzenie klejnotu dla swojej biblioteki. Ułatwiłoby to Korzystanie z biblioteki zarówno autonomicznej, jak i z Rails, a także uprościłoby wdrażanie/aktualizacje.

Ponadto, ponieważ klejnoty zwykle podążają za określoną strukturą katalogów, rozwiązuje to również problem nie wiedząc, jak zorganizować bibliotekę.

Istnieje wiele dokumentacji do tworzenia klejnotów. tutaj jest trochę więcej informacji o strukturze plików, a także innych przydatnych napiwki.

 11
Author: vonconrad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-14 00:02:16

Oprócz zalecanych linków w odpowiedzi vonconrada, możesz odwołać się do sekcji "organizowanie swojego źródła" w rozdziale 16Programowanie Ruby 1.9 autor: Dave Thomas / Istnieje darmowy przykładowy plik PDF tej części książki.

Rozdział wspomina:

16.1 Przestrzenie nazw napotkaliśmy już sposób, w jaki Ruby pomaga Ci zarządzać nazwami rzeczy w Twoich programach. Jeśli zdefiniujesz metody lub stałe w klasie, Ruby zapewnia że ich nazwy mogą być używane tylko w kontekście tej klasy

  

16.2 organizowanie Źródła Małe, samodzielne skrypty mogą znajdować się w jednym pliku... większe programy powinny uwzględniać System RubyGems

anagram/ <- top-level
  bin/ <- command-line interface goes here
  lib/ <- three library files go here
  test/ <- test files go here
 8
Author: user454322,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-20 01:23:55

Możesz rzucić okiem na idealną strukturę projektu ruby w połączeniu z radą vonconrad. Gem z pewnością byłby dobrym miejscem do rozpoczęcia i zapoznanie się z oficjalną dokumentacją rubygems może być również korzystne.

 2
Author: Josh Vera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:09:17

Jeśli chcesz zintegrować Rails, prawdopodobnie będziesz chciał stworzyć wtyczkę.

Ten poradnik może być dobrym miejscem na początek: http://guides.rubyonrails.org/plugins.html

 0
Author: grifaton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-04 19:07:59

Wiem, że to pytanie jest dość stare, ale mam nadzieję, że przyda się tym, którzy przyjdą po...

Zgadzam się z tym, co zostało powiedziane powyżej: klejnoty to świetny sposób na uporządkowanie i ponowne użycie kodu. Oprócz powyższych linków, mogę polecić użycie Bundlera do tworzenia klejnotów zgodnie z opisem w tym wpisie: http://railscasts.com/episodes/245-new-gem-with-bundler

Uważam, że Bundler sprawia, że tworzenie i utrzymanie klejnotów jest bardzo proste.

Regarding dziedziczenie, sprawdź jak Ruby mixins może być używany do hermetyzacji i ponownego użycia kodu przez różne hierarchie klas. http://ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html

 0
Author: jgpawletko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-11 22:49:24