博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工程之殇
阅读量:6507 次
发布时间:2019-06-24

本文共 1136 字,大约阅读时间需要 3 分钟。

今天晚上的心路历程好让人泄气。

继续揣摩laravel项目中ValidationException的设计,看到里面的status,觉得好奇怪,为什么是叫status,不是直接把code设置一下呢?然后想想,好像也对,code是异常的代码,而status是http response的代码,两个不应该混为一谈。

接下来我想看下既然ValidationException没有设置code,那laravel中是怎么做到在渲染的时候把http response statuscode 设置为status的。然后就看到了render里面。

136188-20180114023603332-2117032120.png

第一次看到这个代码,恶心坏了,这个分支的结构,真是太恶心了。然而琢磨了几个小时之后,直到写这篇文章的时候,我有种错觉,我已经把这坨shi吃下去了...

首先我想着是不是能优化下这个函数,是不是能把这里的渲染逻辑放到exception中呢?嗯,好像很完美。但是想想,不对啊。。。我定义一个异常的时候还需要定义好它的渲染方式,定义好它的json输出,html输出?明显不好。。。好,我只能接受在一个大类handler.php里面统一作处理。

其次我想,是不是可以再定义一个基类,让所有的类继承这个类。这里几个类最好的可能就是HttpResponse了。然后其他两个都继承这个类?然后在这个基类里面写一些逻辑?不对啊。。。不管你这个基类是什么,它还是一个异常,不应该在这个异常里面做这么复杂的事情啊。同上。而且,都继承这个类,子类里面也要有各种实现。。。不妥不妥。

好,那么我整理下handler类可好,封装一个函数,把所有的异常都进行遍历可好。但是这个方法可能就是二维的了,request是否json,和异常类型,两个纬度。那么,又是一个很恶心的函数。

呵呵,总而言之,好像没有最优美的解决方案了。遂放弃优化这块。

想想,这个明显是作者的设计不足。设计不够有扩展性。我又详细看了下laravel的异常,几个很大的问题:

1 异常继承随便继承,没有收口,以后要做统一处理,只能一个个遍历处理。有的继承Exception,有的继承Sysforny的Exception,有的继承Responseable接口。。。各种混乱。

2 输出格式没有统一。各种不同的异常需要不同的输出格式,再加上是否调试模式,这里已经有好几个分支了。没有考虑过统一的格式过滤。

哎,优雅的laravel内部还是很多问题的。这个地方,不是很优雅。但是,只能说,介于历史包袱,它只能做到这样了。

于是我想到我们平时的业务工程,不就是和这种项目一样么,越来越久之后,背上承重的壳,也就这么痛苦不堪了。so,这就是工程之殇。

于是,我只能啥都不改,悻悻地上床睡觉。又是一个胡思乱想晚上。

转载地址:http://ohwfo.baihongyu.com/

你可能感兴趣的文章
Oracle数据库入门——初级系列教程
查看>>
eclipse编码格式设置教程、如何为eclipse设置编码格式?
查看>>
JVM 性能调优监控工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解
查看>>
java TimeZone类
查看>>
Bean注入
查看>>
备案以及端口
查看>>
windows平台下cocos2d-x-3.0beta2创建新项目
查看>>
python 基础总结复习
查看>>
C#数组
查看>>
GET和POST有什么区别?
查看>>
爬虫基础 2.4 会话和cookie
查看>>
javascript中array常用属性方法
查看>>
抱歉,我不接私单了
查看>>
关于 hystrix 的异常 fallback method wasn't found
查看>>
转载:while(scanf("%d",&n), n)
查看>>
PHP数据运算优先级总结记忆
查看>>
rhel配置网络yum源
查看>>
15、函数指针
查看>>
dict(字典)
查看>>
UiModeManager设置夜间模式和行车模式
查看>>