所以这是场景。假设您有10个不同的供应商提供您销售的产品。现在,对于这种情况,假设每个供应商都有自己的订单处理方法,每个供应商都需要自己的类。这是一个很大的假设,但我试图在没有所有细节的情况下简化我的真实场景。
单表继承(STI)解决方案
class Supplier < ActiveRecord::Base
has_many :products
# Methods that can be inherited by each supplier go here
end
class MySupplier1 < Supplier
# Custom per-supplier methods go here
end
class MySupplier2 < Supplier
# Custom per-supplier methods go here
end
这个解决方案的一个奇怪之处在于您的供应商表中将有10行。例如,您将永远不会有多个MySupplier1实例。
这是另一种解决方案:
替代模块化解决方案
class Supplier < ActiveRecord::Base
has_many :products
end
class Suppliers::Base
# Methods that can be inherited by each supplier go here
end
class Suppliers::MySupplier1 < Suppliers::Base
# Custom per-supplier methods go here
end
class Suppliers::MySupplier2 < Suppliers::Base
# Custom per-supplier methods go here
end
通过这个解决方案,我觉得它感觉更模块化,但ActiveRecord供应商和Suppliers :: MySupplier1之间的关系真的很尴尬。基本上,我必须将供应商类存储在供应商表中,以便我知道要实例化哪个类进行处理。
有人认为有正确或错误,甚至可能是更好的方法吗?