关于mvc router的建议

首先,非常感谢jfinal如此优秀的框架,但是作为一个使用者的角度,我提几个关于mvc router的建议如下:

1、建议使用约定大于配置的方式,即可以用:“/handler/method/parameters”作为默认的url映射方式,避免配置configroute;

众所周知,struts和spring的mvc之所以不够简洁,很大程度是因为需要一堆url映射配置,这个通过反射可以解决。

2、同时,在parameters域以“p1=xx-p2=yy-p3=zz”的表达式替代"xx-yy-zz"这样的方式,这样比较直观,而且前台提交和后台获取参数就与顺序无关,而是与名称有关。

不知道我的表达是否清楚。

作为关注框架的同行,希望您能认真考虑。

再次致谢。

评论区

JFinal

2016-08-22 15:44

楼主的第一个建议,jfinal 基本上是采用的这种方式,只不过对于每一个 controller 要进行一下类似注册的操作:me.add(controllerKey, controllerClass, viewPath),最后生成的路由与类主所说的是一致的:"/controllerKey/method/parameters",可能楼主是希望在此基础之上,连 me.add(...) 这个操作都去掉之。这个确实很容易去掉,只不过,去掉以后,需要引入额外的概念去完善所缺失的功能,例如,用户希望路由的 controllerKey 是随意变的,有时候不希望与约定一致,而且注册相对于扫描反射的方式更加安全,因为扫描的时候可能会扫描到第三方 jar 中的controller

JFinal

2016-08-22 15:46

第二个建议,"p1=xx-p2=yy-p3=zz"这种参数本身用问号挂参就可以了,例如:localhost/article?p1=xx&p2=yy&p3=zz,而 jfinal "xx-yy-zz" 的参数本身就是为了支持更加简短的 url 而设计的。感谢你的反馈,如果觉得有什么还太方便的地方,多多反馈哈

JFinal

2016-08-22 15:47

再补充一下第一点,在现有的 jfinal 路由设计之上,其实只需要写一个工具类就可以将 me.add(...) 去掉了,这个已经有很多人在这么使用了:me.add(AutoRoutes())

南湖畔

2016-08-22 15:57

非常感谢回复,我说说我的观点:第一个建议,如果是基于安全的考虑,似乎是可以接受的,但我估计极少会遇到这种情况,当然可以通过工具类实现,但对于初级使用者而言,并不容易:);第二个建议,可能是我没有看清楚文档,似乎没有通过参数名获取参数值的getpara方法?之前提过,之所以我比较执着于这种使用方法是有时候前后台的参数传递并非顺序一致,尤其是不同人写的情况下。

JFinal

2016-08-22 16:03

第一个建议中,在需要照顾到打破约定的路由规则时,就需要再引入别的办法来解决,而且 jfinal 的现在的路由在满足你的建议方面有如下两点:
1:可以自己写个工具类实现,很容易地去除掉 me.add(...) 这行代码
2:即便是有 me.add(...) 这行代码,只不过是每一个 Controller 需要配置一行而已,有些 controller 中或许有几十个 action,相当于几十个路由,但配置只有一行代码,所以这个与传统的路由配置在工作量上是有本质区别的

2:getPara(paraName) 就可以获取到问号挂参的参数,文档中有说明,而 getPara(int) 获取的才是 urlPara

南湖畔

2016-08-22 16:12

好的,非常感谢你的回复以及工作。

JFinal

2016-08-22 16:30

@南湖畔 感谢你的支持,头像换一换哈,支持下社区发展

热门反馈

扫码入社