Я играю с путями применения отношений класса в Ruby, прежде чем начинать писать код в выходные дни. Я пытаюсь создать составную взаимосвязь, но я имею некоторый контроль над классом PriceSeries вне класса Commodity.Создание экземпляра композитного класса из метода экземпляра Ruby
Очевидно, что это не так, но есть ли причина для такой настройки? Правильно ли я думаю, что это сделало бы для частных данных и, возможно, было бы целесообразно хранить пароли для экземпляра пользователя (например)?
class ExcelFile
def initialize(name)
@name = name
end
end
class Commodity
def initialize(name)
@name = name
end
def new_price_series(name, source)
name = PriceSeries.new(name, source)
end
class PriceSeries
attr_accessor(:name) #Without this line, is there any point of this class??
def initialize(name, source)
@source = source
@name = name
end
end
end
mm8_prices = ExcelFile.new("some_exlsx_file")
gold = Commodity.new("gold")
gold.new_price_series(:xau, mm8_prices)
что это разница? (я использовал только ruby / python/php и javascript). Я хочу дать понять, когда кодирование того, что экземпляр PriceSeries принадлежит товару и не может существовать без него, но товар может существовать без priceSeries. Кроме того, t [здесь может быть много PriceSeries за товар. Я думаю, что на самом деле я нашел способ сделать это, используя метапрограммирование, чтобы создать методы экземпляра в классе Commodity, которые являются объектами PricePoint. Это хороший способ сделать это? –
В вашем примере вы просто определили класс Commodity :: PriceSeries. Нет особых отношений между Commodity и PriceSeries или их экземплярами - PriceSeries может быть создан кодом за пределами Commodity с использованием Commodity :: PriceSeries.new (имя, источник). Чтобы обеспечить соблюдение отношений, передайте экземпляр Commodity в конструктор PriceSeries. Экземпляр Commodity также может поддерживать коллекцию экземпляров PriceSeries. Это стандартный OO и не требует метапрограммирования. – silvabox