我写得 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, 但不知道这种情况改怎么反驳
7245 次点击
所在节点    程序员
51 条回复
konakona
2014-11-07 17:07:45 +08:00
楼主应该是再没有了解业务环境的情况下妄自修改的。
如果说这是QQ登录,10000以前的不让用因为那是内部帐号,原来的代码将很好的表明这一点,而不需要翻来翻去甚至不用注释。

你改了以后反而费解。
并不是什么东西都要封装的。
barbery
2014-11-07 17:13:50 +08:00
大部分情况下,楼主这样写是对的。。。
zythum
2014-11-07 17:40:14 +08:00
他喵的这个和oop有半毛钱关系
coofly
2014-11-07 17:47:32 +08:00
$login = new ILogin();
$uid = 0;
if ($login->getLoginUid(&uid)) {
//use uid and other
} else {
return json_encode(array('ret'=>-1));
}

两个都有问题
感觉应该这么写吧?
让getLoginUid返回成功与否不就好了

不会php,可能有谬误
ruchee
2014-11-07 18:24:00 +08:00
第一种容易理解,也方便以后的维护,实在没必要去取错误记录绕弯子
railgun
2014-11-07 18:31:59 +08:00
具体情况具体分析咯,反正编程就是在可维护性和性能之前找平衡
hitsmaxft
2014-11-07 21:40:58 +08:00
我觉得吧, 为了方法而方法确实是浪费性能, 也谈不上什么oop, oop得解决具体场景才谈得上设计, 你这连问题都算不上, 只是个方法调用而已

判断一个登录失败, 调用了n个方法, 也没啥必要.

在登录失败的情况下, 直接给login加个属性


$login = new ILogin();

if (!$login->done) {
return ILogin::JSON_FAILED
}
ryd994
2014-11-07 22:03:35 +08:00
你可以搭个脚手架和他比比性能差多少。如果
ffffwh
2014-11-08 00:40:52 +08:00
OOP核心要义:多态。
herozzm
2014-11-08 01:36:45 +08:00
个人觉得,如果只是部分改造,赞成第一种写法,如果是全部重构,我赞成第二种写法
julyclyde
2014-11-08 18:28:05 +08:00
总感觉俩都挺怪的

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

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

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

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

© 2021 V2EX