为什么在JS中使用驼峰式命名法而在数据库中使用蛇形命名法?

7

我被告知在我的数据库中使用蛇形命名法而不是驼峰命名法。JSON API 要求在对象键之间使用破折号。而Javascript 中,则普遍使用驼峰命名法。

如果我有一个从 SQL 数据库获取数据的 RAILS 服务器,将其作为 JSON 发送并在 Javascript 中使用,那么我真的需要在这些表示法之间进行转换吗?

为什么不在所有地方都使用蛇形命名法呢?


4
如果你是为自己编程,那就使用你喜欢的任何工具。如果你是为雇主编程,就使用他们要求的工具。 - user2417483
我真的需要在这些符号之间进行转换吗?someValue != some_value != some-value - 因此,如果您要访问_some value_,则必须在三种格式之间进行转换。附言:我在JSON规范中看不到使用破折号的内容。但是,我不知道您所说的JASON API实际上是什么意思。 - Jaromanda X
4个回答

6

对于JavaScript来说,你可以选择使用驼峰命名法或不使用,这取决于你自己或项目的指导方针。但是,由于几乎每个主要库和核心API都使用驼峰命名法,所以最好也这样做,因为这样你就不需要考虑是否需要使用其中一个。

对于DBMS来说,这取决于操作系统和DBMS,因为使用混合字母可能会导致技术问题。例如,如果你在Windows系统上运行MySQL数据库,则MySQL将不关心表名的大小写,因为文件系统是不区分大小写的。因此,在Windows上默认的MySQL配置将自动将所有表名转换为小写。只要你的DBMS仍然在Windows机器上,这不会成为问题,但是一旦你决定切换到基于Linux的服务器,你将遇到巨大的问题,无法将数据从Windows迁移到Linux服务器。

为了不依赖这些问题,通常在DBMS中仅使用小写字母,无论DBMS是否会有大写字母的问题。使用小写字母,你肯定不会遇到问题,而使用大写字母则需要进行调查以确定是否会成为问题。


感谢您提供详细的答案。因此,我将在我的前端中使用camelCase。这是否意味着我应该使用JS将json“get”请求转换为camelCase?我真的很难弄清楚如何在AngularJS中实现这一点。 - P0lska
如果你将在 Linux 上部署,我觉得这个不值得麻烦。谁愿意为了 JS 手动将数据库数据转换为驼峰命名法呢? - Nikos

3
我认为我们主要的痛点是,我们试图遵循语言社区内已经建立的惯例,但是当JSON从一个语言序列化后,再被解析成另一种语言的映射时,如果变量或对象键不再遵循相同的惯例,就会感到有些恼火。这就是为什么我可能会停止在前端遵循驼峰命名法并回到蛇形命名法的原因之一,因为如果整个项目代码库中只有一种风格,那对我来说就没有太多的认知负担了。当然,这是一个个人项目,我保证在工作中会遭到很多反对。

2
你真的不需要按照标准进行转换。命名约定是为了让一组开发者在同一个应用程序上工作。
遵循组织定义的命名约定是最佳实践,可以更好地理解代码。

2
你可以使用这个库来在蛇形命名法和驼峰命名法之间进行转换:case-converter。它可以将蛇形命名法转换为驼峰命名法,也可以将驼峰命名法转换为蛇形命名法。
  const caseConverter = require('case-converter')

  const snakeCase = {
    an_object: {
      nested_string: 'nested content',
      nested_array: [{ an_object: 'something' }]
    },
    an_array: [
      { zero_index: 0 },
      { one_index: 1 }
    ]
  }

  const camelCase = caseConverter.toCamelCase(snakeCase);

  console.log(camelCase)
  /*
    {
      anObject: {
        nestedString: 'nested content',
        nestedArray: [{ anObject: 'something' }]
      },
      anArray: [
        { zeroIndex: 0 },
        { oneIndex: 1 }
      ]
    }
  */

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接