Win*_*ute 11 enums database-design class-design value-type
我一直在开发一些手机游戏,其中那些游戏从服务器数据库中获取数据.
我习惯将"type"值存储为整数标识符,并在客户端中使用枚举来标识来自服务器的数据.
举个例子:在数据库表上:
怪物表:MonsterId(int),名称(字符串),MonsterType(int)
在客户端代码上:
typedef enum {
MonsterTypeGround = 1,
MonsterTypeAquatic = 2,
MonsterTypeAmphibious = 3,
MonsterTypeAerial = 4
}MonsterType;
Run Code Online (Sandbox Code Playgroud)
请注意,上面的代码是Objective-C,我可以在其中指定整数值.但我也在使用C#和C++.
但是,我们的数据库人说,枚举是一个编译技巧,没有枚举数据类型.他认为整数类型标识符使得人们(其他开发人员)很难理解值的含义,并且他们不可能在不查看客户端代码的情况下知道等价物并且枚举不好因为你需要确保枚举与服务器端ID同步,并且最好使用字符串.
我的问题是:在这个问题上是否有客观正确的答案?
除了在客户端代码上使用枚举之外还有其他选择,但仍然会使用整数作为服务器数据库吗?
All*_*eve 12
你的数据库人显然是错的.当然,如果像ENUM数据类型那样.您在示例中提供了一个.MySQL知道它.许多编程语言都有类似ENUM的东西.
但他也是对的,因为ENUM经常(总是?)由编译器优化.如果有四个选项可以完美地由1到4表示,但我们碰巧发现可识别的字符串更容易在代码中读取.但编译器没有这样的问题,实际上并不关心这个数字.空中怪物是类型4,飞行意大利面怪物是类型4.与比较字符串相比,CPU比较字节更容易按几个数量级的顺序.
此外,他是正确的,在C代码中使用ENUM或任何代码可能是一个问题:
你可以通过一个将字符串转换为枚举的函数或其他方法来解决这个问题.
但也有好处:
没有客观的答案.
如果您发现程序员最容易,那么字符串可能是更好的选择.如果您发现编译器优化最重要,那么枚举是更好的选择.
我的观点是编译器优化很少很重要,但程序员时间很少.除了在某些数据库中,我自己主要使用字符串.
所以是的,你的家伙有一个观点.
好吧,这里是..潜在的downVote饲料,但枚举是我最喜欢的东西之一..
专注于最适合您的设计和代码的内容。不使用枚举是因为数据库没有那种“数据类型”?好的。那么出于同样的原因,我们不要制作任何自定义类。那是胡说八道。
(注意:我用 C# 编码)
switch声明。Beats theHellOutta 整数:switch(MonsterType)MonsterType.Unknown = 0。您的回报将是更容易编写的代码,更少错误且更易于阅读。您的维护程序员会感谢您。if(string.IsNullorEmpty(myString.Trim()) ...- 如果 myString 为空,你的程序就会因运行时异常而崩溃。枚举不能发生。myString = null从数据库中获取的设置不是带值的变量,它甚至不是对象,但我们尝试像对待它一样对待它!if (MonsterType == 3)... 这是什么意思?纳夫说。
这是一个实践练习。在您的 IDE 中,单击“3”并让它“查找定义”。如果您的 IDE 会说话,它会说“为什么不定义问题域中的事物,而不是指望我猜“3”是什么意思?
哦,我知道。我会在某处声明一堆常量......在某处。我的天啊。让我们假设我们正在使用枚举!它比使用一组有凝聚力的类型安全值更有趣!
C# 有一个String.Empty静态属性是有原因的。它不会劫持有效值(例如空格)或 null 来表示实例化的字符串对象,该对象的值明确不是任何(有效)字符串。这与空值不同。
从字面上看,null 没有任何意义。意思是“走开,没人在家”。例如,编码人员通常希望它表示“未知的怪物类型”,但为了大声喊叫,明确定义此类概念(请参阅上面的枚举专业提示)。恕我直言,像这样使用 null 意味着您的设计缺少某些东西。
null 是代码僵尸。它在四处走动,但什么也没有,死了,无论如何。如果你不小心,它会咬你!
您将体验到决定将“空”字符串存储为空格字符或空字符的永无止境的乐趣;
并且空格实际上是有效的字符串域值,而不是“无值”值;
并且 null 和“空字符串”确实没有任何意义,并且在您需要它们的“自然”功能时试图使它们如此会导致问题;
以及从 string.empty 到 null 到 space 的不断大惊小怪的代码转换,反之亦然,以适应手头的任务。随着时间的推移,您的代码将在这方面变得不一致。
现在听我说,以后相信我。
| 归档时间: |
|
| 查看次数: |
3775 次 |
| 最近记录: |