Система для организации многофайловых программ Ruby?
Существует ли стандартная или обычная система для организации многофайловых программ Ruby? Я начал свой первый большой "проект" в Ruby, поисковой программе, которая логически организована в несколько файлов и каталогов. Я описал ниже свою потенциальную структуру:
- Основной файл. Этот файл реализует класс поиска и общий протокол поиска.
- Файл алгоритмического анализа. Этот файл реализует функции, которые интерпретируют результаты поиска.
- Каталог протоколов
- Содержит один файл для каждого протокола для поиска.
- Каталог каналов
- Часть цели программы - поиск архивных лент новостей. Файлы для этой функции находятся в этой папке.
Однако в настоящее время код имеет класс (пусть он вызывает Searcher), который наследует каждый класс поиска протокола (GoogleSearcher < Searcher). Чтобы управлять этим, мне нужно включить основной файл в эти файлы протокола (правильно?), Который не представляется возможным, учитывая мою идеальную структуру.
Помимо моего конкретного примера, мне было интересно, существуют ли какие-либо соглашения, такие как "больше файлов, а не меньше", или "логическая структуризация файлов не нужна". Общепринято ли иметь файл "вспомогательных" функций (например, в Rails?). Какой уровень абстракции считается подходящим?
Наконец, я планирую интегрировать это в Rails когда-нибудь как библиотеку (а не плагин, я хочу, чтобы он тоже работал автономно). Я не знаю, повлияет ли это на организацию.
Я знаю, что это довольно открытый вопрос, но это потому, что я был бы признателен за любые советы, которые отдаленно релевантны. Спасибо заранее.
Ответы
Ответ 1
Возможно, вам захочется создать камень для вашей библиотеки. Это упростит использование библиотеки как автономно, так и с Rails, а также упростит развертывание/обновление.
Кроме того, поскольку камни обычно следуют определенной структуре каталогов, он также решает вашу проблему не знать, как организовать библиотеку.
Существует множество документации для создания драгоценных камней. Здесь немного больше информации о структуре файла, а также другие полезные советы.
Ответ 2
Помимо рекомендуемых ссылок в vonconrad Answer, вы можете обратиться к разделу "Организация вашего источника" в главе 16 Программирование Ruby 1.9 от Dave Thomas et al. Существует бесплатный образец PDF этой части книги.
В главе упоминаются:
16.1 Пространства имен Мы уже сталкивались с тем, как Ruby помогает вам управлять именами вещей в ваших программах. Если вы определяете методы или константы в классе, Ruby гарантирует, что их имена могут использоваться только в контексте этого класса
16.2 Организация источника Маленькие автономные скрипты могут быть в одном файле... большие программы должны учитывать систему RubyGems
anagram/ <- top-level
bin/ <- command-line interface goes here
lib/ <- three library files go here
test/ <- test files go here
Ответ 3
Возможно, вы захотите взглянуть на идеальную структуру проекта ruby в сочетании с советом vonconrad. Драгоценный камень определенно будет хорошим местом для начала, и прогон официальной документации rubygems также может быть полезен.
Ответ 4
Если вы хотите интегрироваться с Rails, вы, вероятно, захотите создать плагин.
Это руководство может быть хорошим началом: http://guides.rubyonrails.org/plugins.html
Ответ 5
Я знаю, что этот вопрос довольно старый, но, надеюсь, он будет полезен тем, кто придет после...
Я согласен с тем, что было сказано выше: драгоценные камни - отличный способ организовать и повторно использовать код.
В дополнение к ссылкам выше, могу ли я рекомендовать использовать Bundler для создания драгоценных камней, как указано
в этом Ryan Bates RailsCast: http://railscasts.com/episodes/245-new-gem-with-bundler
Я нахожу, что Bundler делает создание и обслуживание драгоценных камней очень простым.
Что касается наследования, проверьте, как Ruby mixins можно использовать для инкапсуляции и повторного использования кода
через разрозненные иерархии классов. http://ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html