どちらが最良(または最悪)の命名戦略であるかを決定できないシナリオに遭遇しました。コンテキストは次のとおりです。ノードで構成されるブラケット(トーナメントなど)。ノードは、シードされたプレーヤー、バイ、または別のノードへの参照の2つの抽象要素で構成されます。
概念的に言えば、包含の階層がはっきりとわかります。
Bracket > Node > Element = Seed, Bye, Reference
私はそれらに合成名で名前を付けるかどうかを決定できず、各クラスを同じレベルで宣言します(ネストなし):
class Bracket:
pass
class BracketNode:
pass
class BracketNodeElement:
pass
class BracketNodeElementSeed(BracketNodeElement):
pass
class BracketNodeElementBye(BracketNodeElement):
pass
class BracketNodeElementReference(BracketNodeElement):
pass
または、名前をもう少しDRYにしますが、名前を間違いなく醜くします:
class Bracket:
class Node:
class Element:
pass
class Seed(Element):
pass
class Bye(Element):
pass
class Reference(Element):
pass
シードまたはバイへのアクセスは次のように表現する必要があります:Bracket.Node.Seed
およびBracket.Node.Bye
。
いつもの行き方は?
オプションC:シンプルな方が良い。各クラスをグローバルレベルで作成し、プレフィックスを削除します。
class Bracket:
pass
class Node:
pass
class Element:
pass
class Seed(Element):
pass
class Bye(Element):
pass
class Reference(Element):
pass
これらすべてがモジュールに存在するという事実は、大きくて面倒なクラス名を持たなくても、必要な名前空間を提供します。たとえば、これらをtournament.py
という名前のファイルに置いたとすると、どこからでもtournament.Bracket
、tournament.Node
などを使用します。