在通用 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:另一种解决方案是只使用枚举作为键,并将字符串作为一个简单的字段。但这需要在 Foo 和 FooManager 之间增加高耦合(类实例化 foo 实例)