Как с большинством вещей: это зависит. Каждая из ваших идей имеет свои достоинства. Если бы это был я, я бы начал так:
class Product < ActiveRecord::Base
has_one :aws_item
end
class AWSItem
belongs_to :product
end
Ключевые вопросы, которые вы хотите задать себе:
Будете ли вы предлагать только продукты AWS ECS или у вас будут другие продукты? Если у вас есть продукты, которые не имеют ничего общего с Amazon, вас не волнует ASIN и т. Д., тогда has_one может быть подходящим вариантом. Или, что еще лучше, полиморфное отношение к: доступному интерфейсу, так что вы сможете позже подключать различные типы расширений.
Это просто поведение, которое отличается, или данные тоже будут в значительной степени отличаться? Потому что вы можете рассмотреть:
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
Медленно пройдитесь по этим вопросам, и ответ станет яснее. Если это не так, начните создавать прототипы. Удачи!