我试图了解设置模型文件夹的正确方法。我遇到了一些名称解析冲突。
我有一个与db表对应的rails模型(transport)。进口和出口是运输类型和运输类固有的。还有中间类定义了该层次结构的共同代码。
以下是目前的设置方式:
models/
models/transport.rb
models/transport/
models/transport/import.rb
models/transport/import/
models/transport/import/api.rb
models/transport/import/api/
models/transport/import/api/metric.rb
models/transport/import/api/order.rb
models/transport/import/csv.rb
models/transport/import/csv/
models/transport/import/csv/metric.rb
models/transport/import/csv/order.rb
models/transport/export/
models/transport/export/api.rb
...
以下是一些课程片段:
models/transport.rb
class Transport < ActiveRecord::Base
# common transport code
end
models/transport/import.rb
class Transport
class Import < Transport
# common import code
end
end
models/transport/import/api.rb
class Transport
class Import
class Api < Transport::Import
# common api code
end
end
end
models/transport/import/api/metric.rb
class Transport
class Import
class Api
class Metric < Transport::Import::Api
# metric code
end
end
end
end
问题:组织rails模型文件夹/命名空间的正确方法是什么?
特别是当您继承功能而不是通过内部命名空间扩展功能时。
当前代码有错误,因为ruby认为它继承了它的外部类。我想过使用基础文件夹来避免争用,但是想要了解其他人在类似情况下会做些什么。
models/
models/base/
models/base/transport.rb
models/transport/
models/transport/import.rb
models/transport/import/
models/transport/import/api.rb
答案 0 :(得分:0)
与Зелёный所述类似,我认为所有的传输类都应该被命名为模块。
所以它看起来像以下(不是我的建议):
# models/transport.rb
module Transport
# common transport code
end
# models/transport/import.rb
module Transport
module Import
# common import code
end
end
# models/transport/import/api.rb
module Transport
module Import
module Api
# common api code
end
end
end
# models/transport/import/api/metric.rb
module Transport
module Import
module Api
class Metric < ActiveRecord::Base
# metric code
end
end
end
end
我不建议将类放在类中。这让人感到困惑。看起来你有一个可以导入或导出的传输模型。我不确定他们之间的区别是什么,除了一个人可能发送和一个人可能收到。如果这就是我不会使文件夹结构如此复杂。
也许就像这样:
# models/transport.rb
module Transport
# Stuff that import and export both need, that isn't instance specific
end
# models/transport/import.rb
module Transport
class Import < ActiveRecord::Base
# common import code
end
end
# models/transport/export.rb
module Transport
class Export < ActiveRecord::Base
# common export code
end
end
为了帮助提供更好的答案,我认为我们需要更好地了解API和指标是什么以及它们如何在导入和导出中发挥作用。