惊了 Java 转岗写 PHP 的都喜欢把代码写的这么复杂么

2018-05-19 16:10:47 +08:00
 KomeijiSatori

一个简单的从数据库里获取指定 APPID 下所有广告的接口,内部封装了一大堆神奇的东西

从数据库里拉取东西先要调用 getAdvertService 获取到获取广告的 Service,然后这个 Service 又要获取 AdvertLogic,然后 AdvertLogic 里又调用 AdvertPosLogic,然后 AdvertPosLogic 里才调用 AdvertPosModel 来连接数据库查询。。

然后我精简成几行代码还被吐槽了。。。

https://i.imgur.com/xi6Z0Fn.jpg

11448 次点击
所在节点    程序员
59 条回复
liprais
2018-05-19 16:12:15 +08:00
没法维护是不假,性能就是胡扯了
chinvo
2018-05-19 16:16:50 +08:00
如果那是领导,赶紧跑路

回头性能出问题怕不是全是你背锅

动态解析语言就要有动态解析语言的样子,又不是 C# JAVA 那种预先把各种层、服务、依赖都热起来的模式,弄这么多层自己找不自在

PHP 目前也就是分个 MVC + Service 就能满足维护性需求了
yiqiao
2018-05-19 16:24:05 +08:00
星号。。。要是接口形式的话重要信息不是暴露出去了吗。。
wujichao
2018-05-19 16:26:46 +08:00
似乎不建议直接 select *
KomeijiSatori
2018-05-19 16:26:56 +08:00
@yiqiao 当然没这么不严谨...这个表里没有敏感数据,表里就存了广告链接和广告 ID,这几个参数都是前端要用的,有敏感数据的查询肯定会做过滤的
agoodob
2018-05-19 16:28:53 +08:00
(不黑语言,纯提供案例)之前有个 Ruby on Rails 项目,是 Java 程序员转岗写的,
CSS 响应式不写 media query 写成 javascript 判断屏幕宽度,
然后用 jQuery 来 show() 和 hide()
agoodob
2018-05-19 16:29:46 +08:00
这部分代码最后当然全部删掉了。改成正确的响应式写法
silencefent
2018-05-19 16:34:35 +08:00
没错吧,laravel 都这么写
zjsxwc
2018-05-19 16:34:41 +08:00
虽然我是写 PHP 的,但我觉得没有毛病。

“从数据库里拉取东西先要调用 getAdvertService 获取到获取广告的 Service ”: 通过方法获取 service 比直接通过属性获取好。

从依赖角度看也没有问题:
getAdvertService --依赖--> AdvertLogic --依赖--> AdvertPosLogic --依赖--> AdvertPosModel
learnshare
2018-05-19 16:36:46 +08:00
@agoodob 早期没有 media query 这些东西
newtype0092
2018-05-19 16:37:35 +08:00
我也觉得写'*'太随便了,现在是可能表里没有敏感数据,可是以后如果表里加了新的字段,所有用'*'的地方你敢不全检查一边?
fyibmsd
2018-05-19 16:41:31 +08:00
javaer 写 helloworld 用四种设计模式 了解一下
fyibmsd
2018-05-19 16:43:01 +08:00
oovveeaarr
2018-05-19 16:44:43 +08:00
这个问题就是过度优化啊
不过说句真的,PHP 如果也要封这么多层,每次请求都要 Load 一堆文件,你们 100IOPS 都没有的腾讯云普通云磁盘,真的撑得住么。搞得跟隔壁 Laravel 一样,一个请求就初始化一下几十上百个文件,然后写出来一个只有 5req 的项目,这个性能问题比用不用*大多了吧。
要牢记 PHP 是脚本语言,如果非要像是 Java 那样,我为啥不选择 Java 呢?更别说这两门语言在 Web 下生命周期都完全不一样了,影响性能的点自然也不一样,都说要入乡随俗,这件事不也是这样么?
gaolycn
2018-05-19 16:56:22 +08:00
@agoodob 以前不都是 javascript 判断屏幕宽度吗?只能说明那个 Java 程序员不了解 css media,后端转岗的也正常啊
ranwu
2018-05-19 17:01:08 +08:00
经验不足,不敢妄下结论。不过从我学习 symfony 框架来看,调用逻辑也和这个差不多,把一个大的模块做成一个 service,然后再从这个 service 里调用相应的逻辑,我觉得这样做更符合框架规则,更有利于维护吧,代码也更清晰。站在公司角度考虑,肯定要在性能和可维护性做一个平衡。
aa6563679
2018-05-19 17:06:37 +08:00
后台分 3 层还是很常的模式吧
xrlin
2018-05-19 17:09:24 +08:00
那个。。。难道脚本语言就不适用设计模式吗?至少用 Service 处理逻辑还是业内通用的模式吧,不管用什么语言,这样写测试也方便,虽然 Logic 层我一般分开,但是 service 层还是要有的。
janxin
2018-05-19 17:14:16 +08:00
我觉得就是*的问题


当然 java 程序员写什么都像 Java 也很正常的
instein
2018-05-19 17:50:33 +08:00
java 也可以什么设计模式都不用, 也不分层什么的, 几行代码或一个方法把所有事情都干完, 性能什么的其实都不难, 所以为什么会变成当前这种编程方式, 建议没想过这个问题的思考一下, 应该还是有所受益的。

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

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

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

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

© 2021 V2EX