使用object vs string vs enum

时间:2009-06-09 07:41:30

标签: string object enums

我的情况可能看似荒谬,但我还没有找到一个足够好的解决方案。为了简化问题,问题是这样的,假设您有一个像Manufacturer这样的对象具有countryname属性(如car.Manufacturer.CountryName),并且您希望确保countryname属性不能有重复或拼写错误或其他错误。

它基本上是一个字符串属性,但字符串可以是我不想要的任何东西。一个对象看起来有点矫枉过正,如果要添加新国家或要更改现有国家,我必须重新编译。

我可以在GUI中轻松控制它,但我需要在应用程序代码中控制它。所以我有一个带有属性的对象,可以是字符串,对象或枚举(或其他),我不能决定使用哪个。所以我的选择是这样的:

a)在GUI中对此进行控制,不要在应用程序代码中对此进行检查,这样可能会产生“非法”国家名称的风险。

b)制作一个对象(国家)并使用它,这是过度杀伤并使代码更复杂,但我完全控制重复和所有这些。

c)使用枚举,希望我不必经常重新编译。它简单而有效,但却是一种静态的解决方案。

d)使用有效国家/地区名称的内部字符串列表,并将CountryName作为字符串属性,并确保对该字符串进行验证。我得到验证,CountryName只是一个简单的字符串,但如果我更改有效国家/地区名称的内部字符串怎么办?我必须使代码重新验证程序中的所有制造商对象,确保它们仍然具有有效的contry名称。

我并不完全确定有多少有效的国家名称是多么重要,但我想的越多,我就越发现自己处于灰色地带。对象或结构太多,枚举太静态,字符串太简单。

我可能完全过于复杂,但是当你进入对象与字符串vs enum的灰色区域时,我真的很想知道该怎么做,或者更倾向于思考。

谢天谢地! 哈尔

5 个答案:

答案 0 :(得分:1)

  

c)使用枚举,希望我不必经常重新编译。它简单而有效,但却是一种静态的解决方案。

从这句话我可以推断出您的数据可能会发生变化。在这些情况下,我建议使用外部数据存储(数据库,文本文件,XML文件等)。

答案 1 :(得分:1)

如果国家/地区名称数据完整性对您很重要,我会在数据库或其他持久性方法中存储有效国家/地区名称列表,在应用程序中查询和缓存它们。

然后,您可以添加一个部署后而无需重新编译或更改代码,并且通过缓存,您不会为额外的数据库查询带来大量开销。

答案 2 :(得分:1)

使用该对象。

这真的归结为现在做“复杂”工作的情况,以后生活更容易或现在采取简单的路线,以后生活可能会更“复杂”。

另外考虑到你实际上担心选项b,c&的所有负面影响。然后只是消除你的后顾之忧!

另外还有其他人建议你的数据应该存储在代码外部(数据库,xml文件等......)写一个对象来包装这将是你最好的解决方案。

答案 3 :(得分:1)

我会使用存储为单独文件的字典,例如XML property list,例如:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>UK</key> 
    <string>United Kingdom</string> 
    <key>FR</key>
    <string>France</string>
    <key>SP</key>
    <string>Spain</string>
</dict> 
</plist> 

答案 4 :(得分:0)

可能还有其他选择:

使用存储在外部(可能是人类可读)文件中的国家/地区名称列表。程序启动时,将国家/地区名称加载到字符串数组中(或其他一些有序容器中),并使用列表中的顺序为每个国家/地区分配一个数字(如果使用数组,只需使用索引)。包含国家/地区的变量现在只是一个整数。

另一个技巧是使用单独的对象(只有一个实例)来处理国家/地区名称。这将确保所有对象都使用最新版本的国家/地区名称列表。然后,制造商对象没有字符串列表,而是对包含字符串列表的唯一对象的引用。