语言规范是驼峰写法, SQL 规范是下划线写法,大家在项目中怎么权衡这两种写法的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
scarlex
V2EX    Node.js

语言规范是驼峰写法, SQL 规范是下划线写法,大家在项目中怎么权衡这两种写法的?

  •  1
     
  •   scarlex 2016-11-11 17:15:43 +08:00 12383 次点击
    这是一个创建于 3263 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作为一个强迫症患者,想两方面都满足...

    我目前找到的这些方法:

    • 用 sequelizejs 这类 ORM ,在 ORM 内部实现驼峰与下划线之间的转换
    • 在语言内部用驼峰写法,然后涉及到下换线的地方都用 data['user_id'] 的形式

    我个人是倾向于第二种方式的,不知道大家会怎么权衡?

    41 条回复    2016-11-13 14:25:03 +08:00
    blakejia
        1
    blakejia  
       2016-11-11 17:27:19 +08:00
    弱弱的问一句。为啥你的主题背景是全黑色的呢
    codeface
        2
    codeface  
       2016-11-11 17:29:18 +08:00
    @blakejia node.js 下的节点都是这样的
    isCyan
        3
    isCyan  
       2016-11-11 17:29:37 +08:00
    @blakejia 这是 Node.js 节点的主题吧
    pktangyue
        4
    pktangyue  
       2016-11-11 17:44:54 +08:00   2
    语言规范是驼峰写法, python 表示不服
    yangff
        5
    yangff  
       2016-11-11 17:46:07 +08:00
    综合一下,
    Fuck_Variable_1
    scarlex
        6
    scarlex  
    OP
       2016-11-11 17:46:36 +08:00
    @pktangyue 所以我发到了 Node.js 节点...
    ksco
        7
    ksco  
       2016-11-11 17:48:14 +08:00
    @scarlex 这表情的背景好违和啊
    scarlex
        8
    scarlex  
    OP
       2016-11-11 17:56:44 +08:00
    @ksco V2EX plus 提供的表情在 Node.js 节点下都好违和
    Tuisku
        9
    Tuisku  
       2016-11-11 18:04:10 +08:00
    我感觉 语言规范什么的 都是为了让代码看起来更舒服更顺眼 所以我选择看起来更直观我看着也顺眼的“(大)驼峰式”
    e.g. : UserName

    因为总感觉“小驼峰式”看起来很奇怪 => userName
    tabris17
        10
    tabris17  
       2016-11-11 18:07:37 +08:00
    我司要求数据库命名用驼峰法,找谁评理去?
    DoraJDJ
        11
    DoraJDJ  
       2016-11-11 18:07:41 +08:00
    写惯了 Java ,现在变量命名都在用驼峰写法。

    9 楼说的大驼峰式估计是 C# 带出来的吧
    scarlex
        12
    scarlex  
    OP
       2016-11-11 18:09:07 +08:00
    @Tuisku
    但这种形式的话,在 SQL 里面查询就要带上引号拉, SELECt "UserName" FROM Users;
    这也是我纠结的一部分。
    scarlex
        13
    scarlex  
    OP
       2016-11-11 18:10:41 +08:00
    @tabris17 用了驼峰基本上都会用上 ORM 吧?
    tabris17
        14
    tabris17  
       2016-11-11 18:22:03 +08:00
    @scarlex 我们后端是 Python , PEP8 规范,下划线命名好嘛!!!!
    morning
        15
    morning  
       2016-11-11 18:23:31 +08:00
    推荐一个带转换的 ORM , https://github.com/XadillaX/Toshihiko
    murmur
        16
    murmur  
       2016-11-11 18:24:46 +08:00
    mybatis 一句配置完美解决
    sampeng
        17
    sampeng  
       2016-11-11 18:26:16 +08:00
    团队用什么就用什么,没什么好纠结的。
    个人?那还不够你牛逼的。。随便搞。。反正只有自己看
    scarlex
        18
    scarlex  
    OP
       2016-11-11 18:46:29 +08:00
    @tabris17 咦, python 后端的话数据库用下划线命名很自然啊...还驼峰就搞不懂了
    lonenol
        19
    lonenol  
       2016-11-11 18:46:37 +08:00
    各种实体类转 SQL 语句,table 转实体类的工具都能自动转换吧
    billlee
        20
    billlee  
       2016-11-11 20:08:03 +08:00
    因为我喜欢用长名字,所以都用驼峰法,下划线太占地方了
    scnace
        21
    scnace  
       2016-11-11 20:22:14 +08:00 via Android
    下划线 lint 不会报错?
    scarlex
        22
    scarlex  
    OP
       2016-11-11 20:58:57 +08:00
    @scnace 可以设置 linter 的规则啊...
    smallpath
        23
    smallpath  
       2016-11-11 21:19:49 +08:00 via Android
    node 直接搭配 mongodb 和 redis 吧,全驼峰不用管 mysql 下划线了,自动转驼峰其实挺烦人的,比如 vue 的组件名称
    Tuisku
        24
    Tuisku  
       2016-11-11 21:26:54 +08:00 via Android
    @DoraJDJ 不是 C#带出来的,从入门编程开始我就感觉大驼峰顺眼 所以不管什么语言我一般都这么命名。话说我写.Net 的时候 ReSharper 还一直提示我把大驼峰改成小驼峰,讨人嫌弃哈哈。
    ke1e
        25
    ke1e  
       2016-11-11 21:56:54 +08:00 via Android
    这就是我不喜欢 django 的原因,作为 Python 框架居然用着驼峰命名法
    dexterzzz
        26
    dexterzzz  
       2016-11-11 22:13:29 +08:00
    写好的驼峰看起来很舒服
    kechx
        27
    kechx  
       2016-11-11 22:16:23 +08:00
    如果是数据库字段变量就下划线,其他驼峰。
    onlyice
        28
    onlyice  
       2016-11-11 22:28:51 +08:00 via Android
    @ke1e Django 哪里用到了驼峰?想不出来
    misaka19000
        29
    misaka19000  
       2016-11-11 22:35:42 +08:00
    数据库习惯表名小写,字段大写+下划线
    poorcai
        30
    poorcai  
       2016-11-12 00:03:56 +08:00 via Android
    我感觉驼峰写法好看,个人见解
    Trim21
        31
    Trim21  
       2016-11-12 02:34:00 +08:00 via Android
    驼峰写起来舒服啊。。。小写字母后面的基本靠自动补全,下划线明明还要打下划线。。。
    forestyuan
        32
    forestyuan  
       2016-11-12 09:19:44 +08:00
    如果是工作中的代码,肯定要按公司的规定来。如果是个人项目,喜欢怎么写就怎么写,我现在还用老掉牙的匈牙利命名法呢。
    plqws
        33
    plqws  
       2016-11-12 10:47:43 +08:00
    @Tuisku Resharper 应该是推荐用大驼峰的,估计是你记错了。。
    tabris17
        34
    tabris17  
       2016-11-12 11:03:51 +08:00 via iPhone
    @scarlex 我们的 dba 牛逼呗,不符合命名规范不让上线哦
    Warder
        35
    Warder  
       2016-11-12 12:46:43 +08:00
    前端如果对后台返回的数据中变量格式不爽的话,可以用 humps ,。
    > humps - Underscore-to-camelCase converter (and vice versa) for strings and object keys in Javascript.
    Lpl
        36
    Lpl  
       2016-11-12 13:24:25 +08:00
    @ksco 因为这个表情不是透明的 233
    breakeryang
        37
    breakeryang  
       2016-11-12 13:27:03 +08:00
    不清楚是你们用什么样的技术栈, 但是:
    1. sql 一般不区分大小写
    2. 开发语言里不宜嵌入另一种语言, 如字段名不应该在开发语言中出现
    3. 推荐 ORM 自动转换
    Mistwave
        38
    Mistwave  
       2016-11-12 16:55:26 +08:00 via iPhone
    @Tuisku Haskell 严格区分两种驼峰式
    solee
        39
    solee  
       2016-11-13 00:11:13 +08:00
    js 写数据传递都是下划线,当然参数命名都是驼峰。规范这个东西只要有个自己遵守的标准就行吧~
    gam2046
       
    gam2046  
       2016-11-13 12:57:18 +08:00
    @Tuisku @DoraJDJ 我觉得这个是有原因的, Java 里没有 Property 的概念,属性都是用 Getter/Setter 方法实现的,那么命名的时候都有个动词, getUserName/setUserName ,我觉得这样显然小驼峰比大驼峰好看多了。至于微软系的,完全没有必要弄个 GetUserName 的方法去设置属性,而单独的用 UserName = "xxxx",比小驼峰好看多了。 Java 的方法名和老太太的裹脚布一样,又臭又长,我第一个看 Structs 的类名都蒙了, xxxxAndxxxxx 这个鬼名字都来了,都可以直接当作文档来看。通常 Java 方法名都是以一个动词开头然后接着名词,而 C#一类的几乎就是直接一个名词,或直接一个动词就没了。
    tudou527
        41
    tudou527  
       2016-11-13 14:25:03 +08:00
    参考 Java 引入 DO 层,这个问题就很好解决了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1530 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 16:39 PVG 00:39 LAX 09:39 JFK 12:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86