Code Review 那点事儿

这周也帮其他人看了看代码,发现大家对一些规范不以为然,所以我想借这个机会聊聊。代码规范的重要性说的太多了,我来说说代码不规范的危害。

为什么要统一、规范的命名

举个例子,我们有公寓表 suites、房间表 roomsrooms 里有个关联到公寓的字段叫 suite_id。试问把 suite_id 改成 house_id 是否合理?

单从这个例子来说,好像并无不妥,suitehouse 都能表示公寓的意思。

但是如果我告诉你我们现在还有额外的两张表:

  • house_resources 信息采集端的外部房源,是外部房源进入收房系统的入口
  • resource_house 楼盘字典中的公寓,沉淀下来的外部房源,暂定

这个时候,假如你是非直接开发人员,比如其他工程师、需要看数据库的运营、财务或是 BI,你第一感觉,rooms 表的 house_id 是到哪个表的关联?我觉得猜到 house_resources 的人会多一些,但如果是 suite_id,再辅之以注释,就会好很多。可即便如此,BI 同学也经常过来问字段的关系。。

这个例子想说明,当你的系统已经复杂到无法靠简单的 “望文生义” 去识别&区分时,你就得靠统一的规范去保证大家不会乱。我们约定所有的 xx_id 都是到 xx 表的关联,大家就不会再困惑。

如果只是自己私下写一个二三十行的小脚本,你用 abcdefg 命名没啥问题,但在这里,你 hold 不住的。

信息采集端的几个表前缀都是 house_resource ,渠道就是house_resource_users ,渠道费就是 house_resource_bills ,也算一个识别标记。其实从更大的角度来说,房源和客源的跟进,也都该放一起,历史遗留问题。。

为什么要抽象和封装

思考:为什么我和孟德都没有参与过合同、活动的开发,但都能在几分钟内添加一个可以自定义规则的新活动?答案是,因为现有的封装已经满足现阶段的需要,我们无须关注整个实现逻辑,只需要改一个文件里的一小段(其实就一个 array)就能实现了。

如果之前没有做这些工作,那么市场部今天下午告诉你12点前要上一个活动,你要从头熟悉整个代码,要熟悉每个节点的处理方式。恐怕你就是不吃饭不睡觉也来不及。

其他的系统里,遇到的问题也是一样的:

  • 做支付平台,能否在不涉及业务逻辑的情况下,快速添加一个支付平台
  • 做分期平台,能否在不涉及业务逻辑的情况下,快速添加一个分期公司
  • 做房源对接,能否在不涉及业务逻辑的情况下,快速添加一个信息平台
  • 做供应商管理,能否在不涉及业务逻辑的情况下,快速添加一个供应商

如果你为了省一天的时间,在将来却给每个人加了一天的工作量,那么你的代码就是有毒的。

诚然有很多情况,你并不能预测将来发生的情况,但是按照软件工程的原则,你应该留有扩展的空间。如果其他人已经帮你预料到接下来会有一个类似的东西时,你就必须考虑了。

小故事,退转换上线前的一个晚上,10点多。我在那里吐槽又要改需求,高靖听到了就跑出来跟我说,你们的系统要做的模块化,在碰到这种情况的时候就能快速组合几个模块达到他们的目的,我们以前巴拉巴拉省略500字。。

我当时一阵惊讶,一个不写代码的人都懂这个道理,可为什么我们这些“专业人员”却要对几十年的行业经验嗤之以鼻。

为什么会有必读源码

必读源码最大的用处就是让新人知道这个系统是怎么运作的。

当时我挑了好多个文件才决定选用这几份代码,有几个考虑:

  • 里面包含了laravelorm 的基本用法和文档,能让你快速上手
  • 有我们沉淀下来的各种轮子,能让你快速实现常用的功能
  • 有我们最一般最一般的产品设计规范,避免你为了达到某一个效果费劲脑汁

看这三份代码花不了个把小时,但是不看呢,有几个人都踩了坑,其结果是本来几十行代码的事,花了几百行才搞完。费时费力还有坑

分享两例小故事,

  • 有天雷雷一激动说我们能不能把完成标成红色(好像是喜庆的意思),我还没开口,旁边一个销售就说我们习惯绿色了,然后我才说我们把红色作为警告的意思。

  • 还有我们的列表里按钮一般都在首列,结果就是无论第一列是“编辑”还是一个图标,大家都知道那个修改的地方。

红和绿、行首或行尾,都不是什么原则问题。但是在现有环境下,随机改动就增加了其他人的识别和使用成本,那就属于不合理的设计。

系统内部的 Error、Flash(小提示)、Confirm 以及 DataEditor 的错误提醒,都是统一的组件,即能提高你的开发效率,也能保证绝大多数人快速上手你的作品。

总结就是,强调代码规范,不是闲的蛋疼去满足个人的代码洁癖,而是不想让大家再去踩之前已经踩过的坑,提升整个团队的效率。

至于什么是代码洁癖,我可以分享一下我的一些洁癖:

  • 我不喜欢一大行从半截折开,我自己设的最大宽度是160,后来妥协于 psr 规范,改成了120,出现了很多我觉得奇丑无比的折行。而且经过“科学试验”,我认为我们的项目设140比较合适,为此和张卫还争论过。。
  • 我写 jsonkey/val 之间的冒号我要对齐,工具不支持我就手动对齐,但是为了统一,我也放弃了。绝大多数工具是冒号左边有空格,右边却没空格,我也觉得丑,但。。你懂的。
  • 一个表达式a + b*c,仔细看,+ 两边有空格,但 * 两边没有空格,这是 Go 官方fmt 工具的标准格式,它会把优先级高的运算放一起,低的才有空格。在接触 Go 之前,我自己其实也这么干,特长的表达式,几个空格、几对括号的情况都有过。就为了阅读清晰。
  • 有贝原名 uubee ,我在后台都写的 Ubee,是因为首字母要大写,我觉得 Uubee 又极丑无比,所以就省了 u。好在有 namespace 挡着,应该不会干扰其他人。

所以,不要觉得我是在故意刁难,为了遵循psr 规范我已经很委屈了。。

其实说这些东西,并不是因为水平多么厉害才提,这些规范都和技术本身无关。提到的东西,也都是一路颠簸的血泪教训。谁没被自己的代码恶心过几回?

今天这些更多的是想说为什么要好好设计你的代码,至于怎么设计,以后一点点的整理吧 _

最后

我坚信,写代码不是砌砖,不是画条线放块砖就完成任务了。奥对了,即便是砌砖工人,发现有块砖烂掉了也会毫不犹豫的扔掉,也不会以“赶工期”为由说“就这样吧,反正又不会塌”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,591评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,418评论 25 707
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,567评论 18 399
  • 和平,是和平主义者带来的吗? 今天的罗辑思维专栏,讲了一战后二战前,英国首相鲍德温的遭遇。 不过我更关注的是,在经...
    水平生阅读 429评论 0 0
  • 朋友说:“在大数据时代,经验的作用已降到最小;在机器的轰鸣中,手工制作将被代替。”在行走的路上,认识了很多用匠人精...
    惠风和畅806阅读 723评论 0 2