WEB开发框架选择的思考

好久不见. 提交于 2019-12-04 18:16:47

敝人曾在不同项目中使用JSP-Servlet、SpringMVC,Play2以及JFInal做过WEB开发,对每个框架的易用性和可扩展性都有一定的了解。我也常常会思考这样一个老生常谈的问题:如何选择一个合适的WEB开发框架?现在从我个人的实践体会上来简单的谈一谈。

一、SpringMVC

SpringMVC最让我感到兴奋的是URL映射以及参数处理,这用起来会非常方便实用!

@RequestMapping(value = "/v1/order/{dealId}/user/{userId}", method = {RequestMethod.POST, RequestMethod.GET})
public @ResponseBody WebResponse 
       createOrderOld(@RequestBody OrderParam param, 
                      @RequestParam Long userid,
                      @RequestParam(value = "medium", required = true) String client,
                      @PathVariable  Long dealId ,
                      HttpServletRequest request) {
......

从这个典型的例子上我们来分析:

1)"/v1/order/{dealId}/user/{userId}":是URL访问形式,其中"{dealId}"是一个可变参数,具有由"@PathVariable Long dealId"来接收;

2)method = {RequestMethod.POST, RequestMethod.GET}:限定了http请求访问方式;

3)@RequestBody OrderParam param:Spring会解析http request body里的JSON内容并自动转化为OrderParam对象,节省了我们大量的编码工作;

4)@RequestParam(value = "medium", required = true) String client:medium是必须传递的,结果最终赋予client。

这里仅仅列出来常见的这几种使用形式,其他的诸如格式校验之类的限定大家可自行尝试,不再赘述。仅从这个方面看,SpringMVC做得确实比较便捷!但SpringMVC让人诟病的地方是因为配置太多,这一点可以通过注解的方式来缓解,同时Spring Boot也是针对这个问题做的改进和优化!

二、Play2

Play2可以开发基于Java、Scala的项目,官网有创建项目的简单介绍:

通过命令行即可创建一个标准的WEB应用模版,有点类似于ROR。整个项目的目录结构如下:

其中app是写业务逻辑代码的地方,conf是项目集中配置点(系统参数、日志、DB等),build.sbt类似于Maven里的pom.xml,集中管理依赖的地方。

在conf/routes中,是对URL的集中配置点:

routes:

GET    /user/login    controllers.UserController.login
GET    /user/logout   controllers.UserController.logout

单行、一对一的URL与Controller.Action的对应关系。

使用Play2开发可能并没有想象中那么便捷和容易上手,需要一定的学习。不过好处也是有的,就是可以使用Scala来方便的实现异步、并发的应用,当然这是Scala的语言特点。

三、JFinal

JFinal是目前坛子里最火的项目之一,我也用JFinal做项目开发有4年功夫了,总体上是小巧,很适合小团队实用,是对Servlet的极简封装。这样太简单也会出现一个问题,就是要求对RD的编程素质比较高,否则编码质量很难保证。

JFinal实现的MVC框架中,最吸引我的是Model层和DB实现,我们可以直接通过Db.sql("select *...")来操作数据库,很直观简单!JFinal约定Controller里定义的public void xxx()方法才是一个真正的Action,这就需要我们自己来处理参数,通过getRequest ().getParaXXX来获取并校验,徒增非核心业务的代码量。

四、What are you looking for?

其实,从上面我对这几个框架优缺点的分析可知,我理想中的一个简单、易用、灵活的的WEB框架所应具备的品质有:

1)简单灵活的参数处理:提供基于注解的实现并可以自定义注解,像SpringMVC一样;

2)直观方便的DB处理:像JFinal Model&Db一样,提供充血的Model、SQL不再成为一个配置项;

3)良好的性能:一个太宽泛的概念,但异步&并发是性能优化当中必不可少的手段,Scala降低了这一门槛;

4)剩下的业务实现就由RD来保证吧!

五、How should I do?

是继续寻找还是DIY?DIY也许是目前一个比较靠谱的方式,集合这些框架各自的优点,然后做一个适合自己使用的微型产品也是一种成长和提高!

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!