Nói chung, cách tiếp cận tôi có xu hướng thực hiện là:
module Foo
module Plugin
class Base; end
end
end
class Foo::Plugin::Bar < Foo::Plugin::Base; end
Lớp Base
cho plugin là một quy ước tìm thấy khắp nơi trong RubyOnRails codebase cũng như nhiều người khác. (ví dụ: ActiveRecord::Base
, ActionController::Base
, v.v.)
Tôi không đồng ý với @Matheus Cách tiếp cận của Moreira nơi được sử dụng làm lớp cơ sở và không gian tên cho plugin.
Lý do chức năng duy nhất tại sao điều này không nên làm với quy ước - trong cộng đồng Ruby, người ta sẽ tìm thấy ít trường hợp của các lớp như không gian tên hơn mô-đun. Thời gian duy nhất tôi thực sự thấy các lớp được sử dụng như một vùng tên cho một lớp khác là khi mục đích của lớp được nói là riêng tư cho lớp không gian tên và không được sử dụng bên ngoài.
Bằng cách nhìn vào [Rails API] (http: //api.rubyonrails .org/classes/ActiveRecord.html), tôi thấy có nhiều tên số nhiều hơn trên các mô-đun hơn trong các lớp (xem không gian tên, ở nửa thứ hai của trang). Tuy nhiên, tôi không có đủ kinh nghiệm với Rails để có được khi nào nên sử dụng nó và khi nào thì sử dụng cái kia. –