5

モジュールではなく名前空間にクラスを使用することは有効かつ/または許容されますか? たぶんそれは単なる意見の問題ですが、これが受け入れられている慣行であるかどうかを明確に言うことができる経験を持っている人がいると思いました.

例として、次のクラスを取り上げます。

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 はいくつかの例を以下に尋ねました。これは、ユーザーが Enum 型のメンバーであるクラスを定義できるようにするclassy_enumと呼ばれる、私が作成した Gem 用です。背景については、使用例のセクションを参照してください。私はコード ベースをクリーンアップしており、私が提案した命名スキームを改善できる可能性があることに気付きました。したがって、を使用する代わりに、使用PriorityLowできますPriority::Low(または最も理にかなっているものは何でも、私は後者に傾いています)

4

1 に答える 1

6

Class決定的な答えはありませんが、Rubyクラスが のサブクラスであることは注目に値するようですModule。これは、クラスがモジュールの一種であることを意味します。つまり、やりたいことをするのがおそらく合理的であることを示唆しています。それを避ける理由は確かにわかりませんが、誰かが潜在的な欠点を思い付くかどうか知りたいです.

于 2012-07-15T04:51:47.410 に答える