2012-07-15 35 views
4

對於名稱空間而不是模塊使用類是否有效和/或可接受?也許這只是一個意見問題,但我認爲有人可能有這方面的經驗,可以肯定地說,不管這是否是一種公認​​的做法。帶父類的Ruby子類命名空間

採取以下類,例如:

class Parent 
end 

class Parent::Child1 < Parent 
end 

class Parent::Child2 < Parent 
end 

我知道上面的代碼工作,但它似乎不可思議,而不是使用的命名空間的模塊類。我想將父類名稱添加到子類的原因是我計劃擁有很多子類,並希望避免名稱衝突。例如:

class Priority 
end 

class Priority::Low < Priority 
end 

class Temperature 
end 

class Temperature::Low < Priority 
end 

的替代品,這將是不使用的命名空間,只是用父名作爲子類名稱的一部分:

class PriorityLow < Priority 
end 

是否有使用Ruby命名空間的最佳做法?

更新:

@sawa下面問一些例子。這是我創建的一個叫做classy_enum的Gem,它允許用戶定義屬於Enum類型成員的類。查看example usage section瞭解更多背景。我正在清理代碼庫,發現我的建議命名方案可以改進。因此,而不是使用PriorityLow,你可以使用Priority::Low(或者是很有道理的,但我傾向於後者)

+0

也許,如果您顯示要包含的方法的示例,那可能會使問題更清晰。答案可能取決於此。 – sawa 2012-07-15 07:08:02

+0

@sawa我用我的用例更新了這個問題 – 2012-07-15 10:18:29

回答

5

我沒有一個明確的答案,但它似乎值得一提的是,紅寶石Class類是Module的一個子類,這對我來說意味着一個Class是一個Module類型,這表明它可能是合理的做你想做的事情。我當然看不出任何理由避免它,儘管我很好奇看看是否有人提出任何潛在的缺點。

+2

沒必要這麼猶豫。類是模塊,模塊用於命名空間。這種方法當然比我能想到的更優雅。 – Max 2012-07-15 06:06:49

+0

感謝您的意見。這一直是我的預感,但我會打開一段時間,看看是否有人有任何其他建議。 – 2012-07-15 10:19:56

+0

我用一些關於我的用例的筆記更新了我的問題。不知道它會對你的答案產生影響。 – 2012-07-15 10:21:07