我写得 OOP 今天被喷了

2014-11-07 10:57:22 +08:00
 johnsneakers
事情是这样的,原来的代码是这样:

$login = new ILogin();
$uid = $login->getLoginUid();
if ($uid < 10000) {
return json_encode(array('ret'=>-1));
}

我改成了这样:

$login = new ILogin();
$uid = $login->getLoginUid();
if ($login->hasError()) {
return json_encode($login->getErrorl());
}


说我没事瞎JB调用这么多函数干啥,明明可以一步到位的。
我解释:这样方便维护,而且语义强。
他说:你这个太多调用方法,速度慢。
我:.....

我就是喜欢OOP, 但不知道这种情况改怎么反驳
6669 次点击
所在节点    程序员
51 条回复
chmlai
2014-11-07 11:03:05 +08:00
速度慢~哈哈哈
pykwokcc
2014-11-07 11:10:06 +08:00
让我来写,我也会写成楼主的写法
yxz00
2014-11-07 11:10:06 +08:00
我倒是觉得原来那个版本好些。只不过把那个magic num改成login的属性maxid就好了。
yxz00
2014-11-07 11:10:38 +08:00
这个跟oop也没什么关系
haiyang416
2014-11-07 11:11:17 +08:00
从这几行代码里我没看出你拿 uid 做什么呀,第一个反倒很明白。
我始终觉得不是为了面向对象而面向对象,不是所有东西都需要封装。
这仅对你给的几行代码而言,团队项目的话一切按约定来,个人项目随便了。
sivacohan
2014-11-07 11:14:43 +08:00
我写成类似上面那个被喷了。
咱俩换公司把。
jemyzhang
2014-11-07 11:16:03 +08:00
国内很多都喜欢简单,而不考虑维护性.

记得之前在微信上绑定招行信用卡,硬是绑定不上,弹出错误说我没开卡.后来和客服妹妹过了N天的招,并且后台维护也介入了,还是没解决.

最后的最后的最后才发现原来是我没设定查询密码.

我只想说,去你妹的没开卡,错误信息是这样做的么?!

赞楼主~
fengliu222
2014-11-07 11:17:04 +08:00
无法评判这两段代码的好坏。
你写的那段,$uid压根儿没用上。
还有就是,把错误封装成一个方法hasError是否有必要,是要看错误码的多少,如果错误情况比较多,那么集中处理判断确实挺好的。如果只有一个,就有点设计过度了。。
PrideChung
2014-11-07 11:20:19 +08:00
如果是我就一定会用看小狗的眼神看着他说:“要不要给你介绍几本程序设计的入门书?”
patr0nus
2014-11-07 11:20:45 +08:00
搭配LZ头像看贴风味更佳;)
zakokun
2014-11-07 11:21:38 +08:00
我倒是觉得原来那个语义简介好理解....不过楼主的话配合你的头像很有喜感
hslx111
2014-11-07 11:24:40 +08:00
这个代码没有上下文,很难判断谁对谁错
cxshun
2014-11-07 11:27:49 +08:00
就一行调用还真没必要了。但以速度慢来反驳,只能说哈哈了。
leiz
2014-11-07 11:28:32 +08:00
如果< 10000和 ret -1那个用的地方很多,从维护的角度看,你的做法是对的。不然等以后维护的时候,接手的人哭死。
如果只是一两处,看喜好。我个人会偏向你的写法,否则以后要调整这些错误体系的话,折腾死。
chemzqm
2014-11-07 11:35:55 +08:00
OO的思路更适合功能复杂的产品,简单的调用更适合糙快猛的项目,如果需求多变项目,真没必要过度封装,只会增加所有人的理解成本。
fising
2014-11-07 11:38:19 +08:00
真是啥都能喷。。。
bingu
2014-11-07 11:44:54 +08:00
支持楼主派和反对楼主派梅花间竹地出现了。
levn
2014-11-07 11:46:00 +08:00
快,把json_encode也封起来
curiousjude
2014-11-07 12:02:49 +08:00
@fengliu222 楼主这只是一个代码片段而言,都hasError了,uid当然是没有啦。另外,错误码的多少不一定是一成不变的,系统复杂后,可能的错误情况也会增多。
tedeyang
2014-11-07 12:10:56 +08:00
1,用uid兼做错误代码也真是醉了。这种代码已经不是维护性差的程度,是二义性错误。
2,性能问题有个经典答案:如无必要,不需优化。优化了方法调用的几个纳秒对以ms计的HTTP网络传输有什么意义?要快请用opcode,用java,用C。
3,你的代码也很烂。model、validation、error不应该这么耦合。如果遇到允许为false的字段,你这个机制就出问题了。
这么喜欢OOP,还不转投java阵营?Spring、Annotation、Bean的设计在解决你这个问题上甩了几条街。。。

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

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

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

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

© 2021 V2EX