String 对象vs字符串vs枚举的使用

String 对象vs字符串vs枚举的使用,string,object,enums,String,Object,Enums,我的处境可能看起来很可笑,但我还没有找到一个足够好的解决办法。为了简化问题,假设您有一个对象(如Manufacturer)具有countryname属性(如car.Manufacturer.countryname),并且您希望确保countryname属性不能重复、拼写错误或其他错误 它基本上是一个字符串属性,但字符串可以是我不想要的任何东西。一个对象似乎有些过分,而枚举意味着如果要添加新的国家或更改现有的国家,我必须重新编译 我可以在GUI中轻松地控制它,但我需要在应用程序代码中控制它。所以我

我的处境可能看起来很可笑,但我还没有找到一个足够好的解决办法。为了简化问题,假设您有一个对象(如Manufacturer)具有countryname属性(如car.Manufacturer.countryname),并且您希望确保countryname属性不能重复、拼写错误或其他错误

它基本上是一个字符串属性,但字符串可以是我不想要的任何东西。一个对象似乎有些过分,而枚举意味着如果要添加新的国家或更改现有的国家,我必须重新编译

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

a) 在GUI中控制这一点,不要在应用程序代码中检查这一点,冒着获取“非法”国家名称的风险

b) 制作一个对象(国家)并使用它,这是过分的,使代码更加复杂,但我完全可以控制重复项和所有这些东西

c) 使用枚举,希望我不必太频繁地重新编译。这是一个简单有效的静态解决方案

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

我不完全确定拥有有效的国家名称有多重要,但我越想这一点,我就越意识到自己处于灰色地带。对象或结构太多,枚举太静态,字符串太简单

我可能会把事情搞得过于复杂,但我真的很想知道当你进入对象、字符串和枚举的灰色地带时该怎么做,或者更确切地说,该怎么想

感谢你! 哈尔

c) 使用枚举,希望我不必太频繁地重新编译。这是一个简单有效的静态解决方案

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

c) 使用枚举,希望我不必太频繁地重新编译。这是一个简单有效的静态解决方案


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

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


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

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


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

可能还有另一个选项:

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


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

可能还有另一个选项:

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

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

使用该对象

这实际上可以归结为这样一种情况:现在做“复杂”的工作,以后的生活会更轻松;或者现在走简单的路线,以后的生活可能会更“复杂”

同时考虑到你实际上担心选项b、c和d的所有负面影响,那么就消除你的担忧吧

另外,正如其他人所建议的那样,您的数据应该存储在代码的外部(数据库、xml文件等)。编写一个对象来包装这将是您最好的解决方案。

使用对象

这实际上可以归结为这样一种情况:现在做“复杂”的工作,以后的生活会更轻松;或者现在走简单的路线,以后的生活可能会更“复杂”

同时考虑到你实际上担心选项b、c和d的所有负面影响,那么就消除你的担忧吧


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

我会使用一个作为单独文件存储的字典,例如
<?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>