一般的な OO 言語 (C++、C#、Java など) では、文字列 ID を持つオブジェクトのマップがあり、同じ ID が相対オブジェクトのキーでもあります。
class Foo(){
Foo(string id){this.id = id;}
string id;
string otherProperty;
}
map<string,Foo> foos;
今私がしたいオブジェクトを追加したい場合
map.add("myFirstID", new Foo("myFirstID"));
map.add("mySecondID", new Foo("mySecondID"));
私は文字列を繰り返すのが好きではありません.最悪になるだけです.
列挙型を使用できません (C++ などの一部の言語では、文字列に簡単に変換できないため、列挙型が必要です)
唯一のオプションはカスケードのようです
const string MY_FIRST_ID = "myFirstID";
const string MY_SECOND_ID = "mySecondID";
それまで
foos.add(MY_FIRST_ID, new Foo(MY_FIRST_ID));
このソリューションはより優れていますが、それでも非常に冗長であり、同じクラスにはまだいくつかの結合があり、値を強制することはありません ( enum のように);
より良いパターンを考えることができますか?
PS: 別の解決策は、enum のみをキーとして使用し、文字列を単純なフィールドとして配置することです。しかし、これには Foo と FooManager (foo インスタンスをインスタンス化するクラス) の間に高い結合を追加する必要があります