【问题标题】:Use of object vs string vs enum对象 vs 字符串 vs 枚举的使用
【发布时间】:2009-06-09 07:41:29
【问题描述】:

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

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

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

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

b) 制作一个对象(国家/地区)并使用它,这有点矫枉过正并使代码更加复杂,但我可以完全控制重复项和所有这些内容。

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

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

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

我在这里可能完全把事情复杂化了,但是当你进入对象、字符串和枚举的灰色地带时,我真的很想知道该怎么做,或者更确切地说是如何思考。

谢天谢地! 哈尔

【问题讨论】:

    标签: string object enums


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        与对象一起去。

        这真的归结为现在做“复杂”的工作,以后生活会更轻松,或者现在走简单的路线,以后生活可能会更“复杂”。

        同时考虑到您实际上担心选项 b、c 和 d 的所有负面因素,那么您就不必担心了!

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            可能还有其他选择:

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

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

            【讨论】:

              猜你喜欢
              • 2023-03-16
              • 2020-01-24
              • 2011-09-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-09-22
              • 1970-01-01
              相关资源
              最近更新 更多