与大多数事情一样:这取决于。你的每一个想法都有优点。如果是我,我会这样开始:
class Product < ActiveRecord::Base
has_one :aws_item
end
class AWSItem
belongs_to :product
end
您想问自己的关键问题是:
您是否只提供 AWS ECS 项目,还是提供其他产品?如果您的产品与亚马逊无关,不关心 ASIN 等,那么 has_one 可能是您的选择。或者,更好的是,与 :vendable 接口的多态关系,以便您以后可以插入不同的扩展类型。
仅仅是行为不同,还是数据也会有很大不同?因为您可能要考虑:
class Product < ActiveRecord::Base
end
class AWSItem < Product
def do_amazon_stuff
...
end
end
当 Amazon ECS 不可用时,您希望系统如何运行?它应该抛出异常吗?还是应该依赖目录的本地缓存版本?
class Product < ActiveRecord::Base
end
class ItemFetcher < BackgrounDRb::Rails
def do_work
# .... Make a cached copy of your ECS catalog here.
# Copy the Amazon stuff into your local model
end
end
慢慢地走过这些问题,答案会变得更清晰。如果没有,请开始制作原型。祝你好运!