我是新Ruby,但多年来一直是.net开发者。我希望在我的几个模型中实现组合,以确保它们尽可能松散耦合,但不知道从哪里开始,或者如果真的需要它,我仍然想要像.net dev。< / p>
任何人都可以给我一些指示,从哪里开始。
干杯 科林G
答案 0 :(得分:8)
你是说这种事吗?
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)
答案 1 :(得分:2)
Ruby是一种面向对象但动态类型的语言。作为一种动态语言,rubyists倾向于使用反射和动态修改代码,而不是.net开发人员。当然,因为它是一种面向对象的语言,你可以使用与.net中相同的原则,你也应该这样做,但总是环顾四周,看看如何以更动态的方式实现同样的事情。
例如,ActiveRecord ORM使用composition_of method解决合成,该合成将动态地向您的类添加适当的字段和属性。我不是说这是它应该做的方式(例如DataMapper,这是ruby的另一个ORM,选择一个更“保守”的方法,所以更像(Fluent)NHibernate),它只是一个例子如何以不同的方式完成任务。
像AOP或DI这样的东西不是动态语言的外国概念,它们通常只是以另一种方式完成。对语言的动态方面保持开放的态度,但不要过度。