繁体   English   中英

在红宝石中使用成分

[英]Using Composition in ruby

我是新Ruby,但一年多来都是.net开发者。 我希望在我的几个模型中实现组合,以确保它们尽可能松散耦合,但不知道从哪里开始,或者如果这是真的需要,我仍然在考虑像.net dev。

任何人都可以给我一些指示从哪里开始。

干杯科林G.

你是说这种事吗?

class Engine
    attr_reader :horsepower, :litres
end

class Gearbox
    attr_reader :manufacturer, :model_no
end

class Car
    def initialize(engine, gearbox)
        raise "Invalid Engine Object" if !engine.kind_of(Engine)
        raise "Invalid Gearbox Object" if !gearbox.kind_of(Gearbox)
        @engine = engine
        @gearbox = gearbox
    end
end


car = Car.new(Engine.new, Gearbox.new)

Ruby是一种面向对象但动态类型的语言。 作为一种动态语言,rubyists倾向于使用反射和动态修改代码,而不是.net开发人员。 当然,因为它是一种面向对象的语言,你可以使用与.net中相同的原则,你也应该这样做,但总是环顾四周,看看如何以更动态的方式实现同​​样的事情。

例如,ActiveRecord ORM使用composition_of 方法解决合成,该方法将动态地向您的类添加适当的字段和属性。 我不是说这是它应该做的方式(例如DataMapper,这是ruby的另一个ORM,选择一个更“保守”的方法,所以更像(Fluent)NHibernate),它只是一个例子如何以不同的方式完成任务。

像AOP或DI这样的东西不是动态语言的外国概念,它们通常只是以另一种方式完成。 对语言的动态方面保持开放的态度,但不要过度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM