21

Có hệ thống tiêu chuẩn hoặc thông thường để tổ chức nhiều chương trình Ruby không? Tôi đã bắt tay vào "dự án" lớn đầu tiên của tôi trong Ruby, một chương trình tìm kiếm được tổ chức hợp lý thành nhiều tệp và thư mục. Tôi đã phác thảo bên dưới cấu trúc tiềm năng của mình:Hệ thống để tổ chức các chương trình Ruby đa tệp?

  • Tệp chính. Tệp này triển khai lớp tìm kiếm và giao thức tìm kiếm chung.
  • Tệp phân tích thuật toán. Tệp này triển khai các hàm giải thích kết quả tìm kiếm.
  • Giao thức thư mục
    • Chứa một tập tin cho mỗi giao thức để tìm kiếm.
  • Feeds mục
    • Một phần của mục đích của chương trình là để tìm kiếm tin tức lưu trữ feeds. Các tệp cho tính năng này đi trong thư mục này.

Tuy nhiên, mã hiện đang có một lớp (chúng ta hãy gọi nó Searcher) mà lớp tìm kiếm của mỗi giao thức được thừa hưởng từ (GoogleSearcher < Searcher). Để quản lý điều này, tôi cần phải bao gồm các tập tin chính trong các tập tin giao thức (phải không?) Mà dường như không thể cho cấu trúc lý tưởng của tôi.

Ngoài ví dụ cụ thể của tôi, tôi đã tự hỏi nếu có bất kỳ quy ước nào, chẳng hạn như "nhiều tệp hơn là ít hơn" hoặc "cấu trúc hợp lý các tệp là không cần thiết". Có thông thường để có một tệp các hàm "trợ giúp" (như trong Rails không?) Mức trừu tượng nào được coi là thích hợp?

Cuối cùng, tôi dự định tích hợp điều này vào Rails một ngày nào đó như một thư viện (không phải là một plugin; Tôi cũng muốn nó hoạt động độc lập). Tôi không biết điều này có ảnh hưởng đến tổ chức hay không.

Tôi biết đây là một câu hỏi khá mở, nhưng đó là vì tôi sẽ đánh giá cao bất kỳ lời khuyên nào có liên quan từ xa. Cảm ơn trước.

Trả lời

11

Bạn có thể muốn xem xét việc tạo một viên ngọc cho thư viện của bạn. Điều này sẽ giúp dễ dàng sử dụng thư viện cả độc lập và với Rails, cũng như làm cho việc triển khai/cập nhật đơn giản hơn.

Hơn nữa, vì đá quý thường theo cấu trúc thư mục cụ thể, nó cũng giải quyết được vấn đề của bạn về việc không biết cách sắp xếp thư viện.

Có rất nhiều tài liệu có sẵn để tạo đá quý. Here 's một chút thông tin về cấu trúc tập tin, cũng như các lời khuyên hữu ích khác.

+0

có một vài công cụ tạo đá quý gọn gàng: newgem, Jeweler, bones. Tôi sử dụng newgem cho một dự án (thực sự KHÔNG được dự định phát hành như một viên ngọc) và nó hoạt động khá tốt – RyanWilcox

+0

Điều này là tốt, và nó chỉ để lại một câu hỏi chưa được trả lời (nhìn lại, câu hỏi này chắc chắn là quá rộng.) một cách để có kế thừa lớp trên nhiều tệp, trong đó lớp chính nằm trong tệp chính và các lớp kế thừa từ nó nằm trong các tệp ngoại vi trong thư mục con? Hay đó là một tổ chức ngược? –

+0

Ruby là khá tha thứ khi nói đến thừa kế. Nếu tôi hiểu câu hỏi của bạn một cách chính xác, nó chắc chắn sẽ có thể thiết lập nó khi bạn mô tả. Nếu không biết bất kỳ chi tiết nào về dự án của bạn, tôi có thể làm điều tương tự khi một "lớp chính" nằm trong thư mục lib/foo/và các lớp kế thừa từ lớp chính nằm trong lib/foo/bar, lib/foo/baz và vân vân. Có một cái nhìn tại đá quý như Nokogiri cho các ví dụ trực tiếp của loại thiết lập. – vonconrad

0

Nếu bạn muốn tích hợp với Rails, có thể bạn sẽ muốn tạo plugin.

Hướng dẫn này có thể là một nơi tốt để bắt đầu: http://guides.rubyonrails.org/plugins.html

+0

Thú vị, nhưng tôi không nghĩ rằng tôi muốn sâu sắc về tích hợp Rails. (Đặc biệt vì tôi không phải là một chuyên gia Rails). Tôi nghĩ rằng tôi sẽ chỉ sử dụng nó như một thư viện để thay thế. Đã yêu cầu cập nhật để làm rõ. –

8

Bên cạnh các liên kết được đề xuất trong câu trả lời của vonconrad, bạn có thể tham khảo phần "Tổ chức nguồn của bạn" trong Chương 16 của Programing Ruby 1.9 bởi Dave Thomas et al. Có một số free sample PDF of that part of the book.

Chương đề cập:

16,1 Namespaces Chúng tôi đã gặp phải một cách rằng Ruby giúp bạn quản lý tên các sự vật trong các chương trình của bạn. Nếu bạn de phương pháp fi ne hoặc hằng trong một lớp học, Ruby đảm bảo rằng tên của họ có thể được sử dụng chỉ trong bối cảnh của lớp đó

16,2 Tổ chức Nguồn của bạn nhỏ, khép kín tập lệnh có thể nằm trong một chương trình đơn lẻ ... lớn hơn nên xem xét hệ thống RubyGems

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

Tôi biết câu hỏi này khá cũ, nhưng hy vọng sẽ được sử dụng cho những người đến sau ...

Tôi đồng ý với những gì đã nói ở trên: đá quý là cách tuyệt vời để tổ chức và sử dụng lại mã. Ngoài các liên kết trên, có thể tôi khuyên bạn nên sử dụng Bundler để tạo ra viên ngọc như được nêu trong này Ryan Bates railscast: http://railscasts.com/episodes/245-new-gem-with-bundler

Tôi thấy rằng Bundler làm sáng tạo và bảo trì rất đơn giản đá quý.

Về thừa kế, hãy xem cách phối hợp Ruby có thể được sử dụng để đóng gói và sử dụng lại mã qua các phân cấp lớp khác nhau. http://ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html

Các vấn đề liên quan