关于最近对于框架的一些思考

生活

最近做招聘网站,用 tp3。其实前两周就想写个文章记录一下自己最近学习到的东西,不过被人民的名义拦住了我记录的步伐。趁着项目刚刚完结的间隙,做点小记录。

##1. 对代码分层的思考

因为代码编写的功底一直都是自学,基本上也没什么框架架构的思想在里面。用了 tp 看见很多人都说写坏习惯,毕竟一个 M 方法就可以快速调用数据库里对应的表还生成对应的 CURD 方法,真的挺便捷的。所以完全可以一个 controller 就把一整个模块实现。但是一直做着一个招聘网站,不自觉间慢慢地也理解并学会了一些框架里的强大便捷之处。

代码全都耦合到控制器中自己过一段时间会很慌,所以目前就做了简单的分层,搞了一层 model(虽然本来就应该这么做)。经历了一段坏习惯以后,忽然明白了模型的重要性和便捷之处。首先一般的框架都有自动验证和自动完成数据接收的方法,需要在模型里进行简单的定义。另一个层面就是级联操作,“级联” 一词是在做毕业前的实训接触到的,一个词的理解真的需要好长时间才能明白真真的意义。为了级联操作,可以实现一个完整的关联删除功能;也为了视图模型,视图模型其实就是带有一堆 join 语句的模型,自己来实现这样的功能好麻烦,框架预处理一套方案,只需要自己定义一下即可。

因为 tp 里没有什么路由的概念,只有一个 rewrite 的方案,跟最新的框架设计有一定区别,因此还需要 logic 层和 service 层;model 默认就是 curd 和接收返回数据,业务逻辑丢给 logic,服务类方法塞进 service(类似于当前模型的工具包)。

结构清晰明了了以后就明白其实控制器就是个路由,还有一些基本上接近无逻辑的调用操作。M 层承担了大部分的逻辑和细分功能的编写,整体就清晰了,无论项目多么庞大都可以很快地找准目的地。也提高了可读性和可理解性。

##2. 对代码注释的思考

因为一直都是一堆 function 的堆积写法,所以一向都有注释的习惯,可是我的注释更偏向于逻辑步骤的注释,一方面方便自己的开发思路,另一方面别人要改代码的话也好理解。无注释真的是考验理解能力到爆炸的程度。

此外还因为用了注释插件,可以很方便地写方法的注释,标记方法的用途,和使用方法已经返回的数据。还有 git 提交也应该写上精炼简洁的内容,方便别人一眼看出你提交的代码是些什么东西,还有 git 提交尽量一块归好一块地提交,免得代码混合在一起影响 review 检查。还有数据库的字段也应该做好对应的字段介绍,comment 里可以写上,model 里也可以再记录一下。这样就清晰明了了。

##3.curl 这个坑的试验

公司里的接口明明贼快,但是放到线上服务器就各种卡顿,相应缓慢对 php 程序造成的影响是巨大的,因为 php 是脚本语言,还没跑完卡住了可能会导致用户快速关闭了页面造成数据的写入不完整造成一整个账号的逻辑不关联。一不小心就蝴蝶效应,搞了好久一开始以为是服务器质量问题,后来查了一圈发现应该是 dns 的问题,具体应该说是 ip 解析跨运营商造成的问题。最快的解决方案就是写个 hosts,指定 ip,瞬间就 ok 了。

上面就是最近两个月最深刻的体会,可能还是蛮落后的思想,但是感觉自己心中开始有了一点点架构的思想,是个好的新开端,end。