和其他开发合作,如果理念不同也是很难受啊。。

2018-06-02 12:12:30 +08:00
 yang2yang

背景:开发一个新项目,一个前端、两个开发、一个项目经理。

刚开始开发大家也没啥矛盾,一个正经地开会、讨论、分配任务、各干各的活。开始大家还是比较愉快的,之后就发生了这个几件小事。

  1. 定义一个数据库的字段,用来表示这条记录的 type(类型)。整张表一开始都是本人定义的,开始就想定义成 varchar 类型的,在代码里面定义好枚举,然后愉快继续开发。到后来,被开发同事(以后用 C 指代)看到(因为这个时候要使用到这张表)之后。

    C:"这个字段 type 改成 int 吧。"。

    wo:"为啥?当时定义成 varchar,考虑到可读性好一点,如果 int,好处是节省空间嘛。不过,这张表记录不会超过几百个条记录,还是 varchar 好一点。"

    C:"一般这个类型一般都是使用 int 类型的,你这样以后出了啥问题怎么办"

    wo:"能有啥问题?"

    C:"现在当然还看不出来,万一以后出了,这种都不好改。"

    wo:"....."

    最后还是没改。

    另公司没有代码习惯数据库的定义的规范,而且公司一般用 varchar 来定义类型。

  2. 还是数据库的设计问题。用了随机生成的 uuid 做主键,被看到后,告诉 wo 要加一个自增 id。wo:"为啥?",C :"一般表都会有个自增的作为主键的。" wo:"表 1 表 2 会被表 3 引用到主键,所以表 1 表 2 的主键要唯一,自增不 符合。" C:"引用的时候用 uuid,但是自增 id 还是加一个吧。" wo:"..." 最后还是加了一个。

  3. 当然其实不止数据库了。还有,C 写的模块要有一个函数需要被 wo 调用。当开始写了一个传一个参数的,后来考 虑到可能有批量调用的场景。就又写了一个可以传 list 的接口。然后,就把之前那个给删了。wo:"别删啊, 留着呗。" C:"有 list 的就够了,干嘛要那个。。" wo:"好吧...."

之前也经常和别人合作写代码,虽然也有这种习惯、写法不一致的情况,但是发生的次数还是比较少。但这次,发生地是最频繁的了。有时候争执的时候妥协,有时候要据理力争。最近,也在烦恼,到底是为什么会这样?是 wo 的太固执,还是别人做法不对。最烦的时候,想想还是一个人开发的时候爽。安静下来想想,如果合作的好,还能从别人身上吸收到不少好处。也许一种相对来说好的方式来解决各自觉得有道理的情况是不是 "自己的模块怎么实现的尽量按自己的思路来,别人怎么实现的也别去管"。

当然虽然合作的不愉快,不过写代码的人都是善良的。

深知自己所知甚浅,很想得到各位大佬一路走来的经验分享,能有自己的心路历程就更好了。

6000 次点击
所在节点    程序员
64 条回复
liuhuansir
2018-06-02 12:25:38 +08:00
最后一个不说,1,2 这两个感觉他的说法是对的
canrom7
2018-06-02 12:31:42 +08:00
恕我直言别人的比你的正确
hduwillsky
2018-06-02 12:32:17 +08:00
一般主键是与业务无关的,防止传递依赖。同上楼,感觉 1、2 C 说的没毛病
duanquanyong
2018-06-02 12:36:27 +08:00
@hduwillsky 如果做主主复制,双活的时候,UUID 还是比较爽的
broadliyn
2018-06-02 12:45:58 +08:00
楼主应该是那种水平一般,但是又觉得自己很厉害的人。
所以不要扯到理念问题,先把自己的水桶装满再来晃。
huluhulu
2018-06-02 12:52:44 +08:00
我决定他比你正确……多学学一些规范性的基础吧
lxml
2018-06-02 12:54:02 +08:00
我怎么觉得应该发帖的是 c,int 和 vchar 用来表示类型问题不大,这个东西反正都是代码里写枚举或者 const 的,不存在可读性哪个更好的问题,个人觉得 int 更佳。
第二个 uuid 本来就有重复的可能,而且用 uuid 做主键,主键排序和遍历一定不如自增的用起来方便,这显然是常识。
第三个,没兼容性包袱,在开发阶段尽量精简代码,甩掉没用的接口或函数我觉得没啥问题吧。
carlclone
2018-06-02 13:05:57 +08:00
恕我直言你层次没他高
takato
2018-06-02 13:09:48 +08:00
1 的话,一般成熟的系统中 使用 二进制编码转 int 比较多一些。这个比较好扩展,因为如果哪天你要塞一个维度的类型进去,但是又不动表结构的时候可能会有优势。

对于另外两个问题我持中立态度。。


当然我能感觉得出来,你纠结可能是因为对方在说明他自己的方案的时候,没有讲解清楚方案的优势以及改进初衷。

我个人的看法是你俩各有一半责任。给方案如果能不仅局限于方案本身,同时把方案所能造成的影响也做一个归结整理,这样沟通起来才会容易一些吧。
hjdtl
2018-06-02 13:10:27 +08:00
总结:前端不算开发
doubleflower
2018-06-02 13:12:57 +08:00
你应该问问他遇到你这样的难不难受
E1n
2018-06-02 13:20:43 +08:00
哈哈😄
janus77
2018-06-02 13:25:04 +08:00
所以大型项目考虑最多的不是优雅 甚至不是性能,而是规范。对于超大量的项目来说,重写重构才是最大的成本阻碍,所以无论如何要先确定好规范
TabGre
2018-06-02 13:25:06 +08:00
前端是设计师吗?
Immortal
2018-06-02 13:29:11 +08:00
看来我应该也被同事讨厌了..1 2 3 的事情我遇到也会和 C 做的一模一样
enenaaa
2018-06-02 13:40:45 +08:00
楼主心里难受是因为双方没摆正自己的位置, 所谓一山不容二虎,除非一主一仆。
如果选不出老大,最好大家都不当老虎。要么以理服人,要么各扫门前雪。
zengmingyang96
2018-06-02 13:42:25 +08:00
我认识一些厉害的,都是依赖于直觉,相信比你厉害的,直觉比你准
WillieYang
2018-06-02 13:46:53 +08:00
@hjdtl 笑尿
lsls931011
2018-06-02 13:51:43 +08:00
恕我直言,1,2 条是对的
zgray
2018-06-02 13:57:00 +08:00
不说技术我觉得这里 C 表现的更多是以经验压人。而这种经验不见得就一定是好的。

问题 1 说的类型用 int 也不一定扩展就好,我们还用过 char(1)的,符合业务场景就是好的。对于以后扩展,很多时候不仅仅是加类型,也可能变更类型,比如原来有个出库类型是销售,可能随时间推移会出现海外销售和国内销售,这时候可能会希望原来的销售编号做分离,这时候无论哪种都没那么简单。

问题 2 自增的是可以考虑但是没有给出理由,楼主的 uuid 也没问题,uuid 在未来有数量迁移和库表合成有好处。而且 uuid 把时间区信息调到前面一样可以解决排序问题。如果数据大要排序,加个整型的排序字段比自增更有意义。主键唯一除了 uuid 还有 twitter 的雪花算法产生 id。数据库中并没有谁规定一定要自增列,比如 oracle 的自增是靠序列实现的,而主键列我们也不直接用序列,而是拼接上一个前缀。同时业务场景中往往不会直接按主键排序,所以自增完全看场景,没有一定的说法。


问题 3,删除没用代码有好处,但是如果是重载方法就不见得删除的好,更多可能要评估为什么当初要写出这种代码,比较有时候调用送 list 还得产生一个 list 对象,而这个 list 才一个实体,那这时候的 list 产生意义就很低了,多了内存占用确只是为了兼容。

总之我是认为事情要商量,要以理服人,不能老是说经验。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/459780

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX