[吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。

2020-04-13 16:30:36 +08:00
 dvaknheo
虽然是看 yii3-demo 吐槽的,但 Laravel 等框架也适用。

业务代码里,和框架相关的代码越少才是耦合性越低啊。口口声声说解耦,但是一看代码里一堆和框架代码相关的,这能叫解耦么。

业务代码里,框架相关的代码多,意味着碰到框架相关的代码就越多

读代码,最怕的之一是:这东西怎么来的。 一两个特例马上能教人懂,多了没法马上会啊。

View 里不能做任何计算,不能 include 非 View 的代码。

Laravel 优雅的带着 PHP 优雅的 Java 化。当初 PHP 上手就干的年代,这是 PHP 的优势。

现在一堆代码,业务相关的没几行,这还是 PHP 么。

ORM 就非用不可么,Data struct 不容易理解么

有好用的文件路由不用,非得手写路由 (src/Factory/AppRouterFactory.php)
PHPer 的原则应该是 其他路由模式是文件路由的补充啊。

配置文件里一堆 use (config/web.php)

MVC 缺层都是大家的共识了, 业务逻辑层叫 Service 或 Logic 我都无所谓,但直接 Controller 里调用 ORM,以前 10k 行的 Controller 啊。 从 Controller 里把业务逻辑剥离出来,跑命令行测试不好么。

PHP 开发速度很快,运行速度也很快。 没必要为了那些优雅牺牲开发速度,运行速度。

讲真,我动力再足一点,写个同功能的 插进这些框架的 demo 中, 让大家见识一下应该用什么样的手段最符合 PHP 的快速开发模式。
16157 次点击
所在节点    PHP
126 条回复
Varobjs
2020-04-15 23:00:32 +08:00
看样子 G 函数是 getInstance 获取单例之类的
话说现在不应该人均 IDE 写代码了吗,G 还得按 shift,还不如 getInstace,偷鸡不成蚀把米的感觉
conn4575
2020-04-16 07:35:59 +08:00
php 的问题就是框架太多,没有像 spring 一样的集大成者,开发者资源都浪费在发明框架重复造轮子上面,现在是后互联网时代了,生态够广才能活下去
cszchen
2020-04-16 08:14:23 +08:00
@conn4575 并不会,大部分造轮子的都是自嗨
yekern
2020-04-16 08:40:07 +08:00
... 不喷不闹 推荐大家去看看郭德纲的 《你要高雅》
dvaknheo
2020-04-29 18:06:40 +08:00
我 fork 了一个 yii3 demo 的版本(大概 80%进度),在 入口处 加了些代码,强行插入 duckphp 框架版本的实现。见

https://github.com/dvaknheo/yii-demo

我切 github 默认分支不是 master 分支,而是 for_duckphp 分支。

for_duckphp 分支,实际干了两个分支的事情,后面再拆分。

for_duckphp 另一个分支功能的事情 是 service 化。src/service 目录 ,抽出来,单独成立一个分支,然后画关系图让大家看看 这部分和 duckphp 没关系

最主要的就是在 index.php 入口 插入 duckphp 版本的实现。
duckphp 版本的特点

1. 只在 composer.json 依赖一个包:dvaknheo/duckphp 1.2.3 。
2. 相关实现都在 app 目录底下。其他文件只改了 public/index.php ,src/Command 目录的命令行入口。
3. 保证输出和 yii3 demo 一致。原有 bug 不改。入口文件在请求完之后 curl 原来 url,如果相同输出,则输出 same. 否则输出 different 并在 runtime 里加 a.php ,b.php 方便对比。
4. 业务逻辑提取成 Service 层 . 6 个目录,view 是视图目录,config 是配置目录, Model 跟着 表走,Controller 负责输入,输出 view 前处理,业务放到 Service 。 Base 目录是核心才动的目录。基本上不交叉引用。

用 cloc 算了一下 app 目录 1760 行,比 src 目录 2289 行少点, 还有点 yii 的引用,主要是 3 个复杂组件没拆解,也不想拆解,留着就行。 分页还有进一步调整可能。

两个星期折腾这个代码,感觉有点慢。 或许,就弄了个大白象?
回头来看 yii2 的代码主要还是 卡在 behaviors 和 actions 上, 说不定哪天就重写了。 然后把 gii 也重写了。

到现在,逆行工程,主要还是,这玩意从哪里来的? 这玩意被什么东西悄悄调用? 这玩意里面有什么?

yii3 里 那个 widget PostCard 在 view 里计算 我就很不爽, 后面拆解成 view 文件 ,传入 array 。看上去清晰多了。

还有想吐槽的暂时记不清,就暂时到这吧。
ajaxfunction
2020-05-06 23:33:44 +08:00
说实话 php 适合小作坊类, 甲方要求 3 天一个 H5 项目(投票,抽奖,砸金蛋,猜灯谜,划龙舟等) ,从 0 到上线,费用预算 2K 。 你做还是不做?
肯定做啊,模板切图 tp+jquery 一把梭,2 天赶项目,还有 1 天时间摸鱼

什么 laravel 什么 vue 统统滚犊子,等脚手架搭建好,路由规则写好,活动早就结束了

你说让 java 和 python go 程序员去写这类项目? 2k 预算,估计早就被喷出翔了吧

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

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

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

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

© 2021 V2EX