• 周六. 8月 20th, 2022

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

利用模板引擎提升开发效率

admin

11月 28, 2021

  【想法】

  在过去几年的开发工作中,我发现不论是前端还是后端,很多开发场景下各个相同层次的业务代码相似度都是很高的,以至于项目开发熟悉到一定阶段的时候,不管什么业务丢过来我们起手就是创建这些固定模式的文件和代码。尤其是对于同一个公司,同一组项目开发人员,在做类似场景开发时,可能整个模块的代码都是非常类似的。比如Java开发时,我们会惯性地创建entity,dao,daoImpl,service,serviceImpl等等,而前端代码也会有很多相同的标签组合等,甚至在很多常见的业务场景中,SQL语句都是有套路的。

  如果这个重复的代码构建过程会贯穿整个项目开发,那很有必要自己写一套能够实现我们需求的模板工具。如果你所在的公司是一种业务导向(在中国绝大多数公司都是这样)的公司,那么我觉得这件事情就宜早不宜迟,早制作早享受它带来的便利,不但可以提升我们的工作效率,将机械式的固定代码编写任务交给这个工具完成,而且可以在潜移默化中提升我们的思维习惯,毕竟在编程这件事情上,提升生产效率的工具和思维怎么推崇都是不过分的。

  其实现阶段各种框架的脚手架,网上的code generator工具已经很多了,这些内容作为一种面向大部分开发人员的工具具有很强的通用性,但也正是由于这种通用性限制了这些工具在我们自己工作中的自动化程度。所以对于我们自己来说,最好是能够根据公司常用或者自己常用的框架以及业务开发套路进行深度定制。基本流程如下:

  随着我们经手的项目不断增多,经验越来越丰富,我觉得必须要不断地在实践中总结各种模板,并将它们沉淀到具体的工具之中。这样在后期的开发过程中,我们的开发效率也会随之不断提升,可以节省更多的时间和精力去做更有意义的事情。

  有了以上想法,我们落地实现的思路就是将这些代码编写提炼成模板,根据不同的场景配置不同的模板文件,在模板中使用变量进行输出内容进行控制。当一个具体的需求来临时,我们可以思考具体采用哪套模板后通过命令或者界面来进行源代码的自动生成。其实这就是各种脚手架、模板语言的核心用途。

  【场景】

  我记得刚参加工作时,接到了一个需求,要求将每天业务数据库中的数据进行统计,并最终生成一个邮件发送给项目相关人员。当时直接就上手写了简单的html标签,在代码中直接将这些标签处理成了字符串,和统计数据一起制作成表格和图片并生成了邮件每天定时发送。现在回想起来,如果当时能够使用模板进行处理,那么邮件样式的修改肯定会非常方便。

  另外,我们最常接触到的web系统中,也是通过各种模板工具,模板引擎将用户界面的开发与业务逻辑的开发进行了分离,当用户请求页面数据后,服务器端会根据用户请求的参数进行业务逻辑的处理并最终生成业务数据(Model),业务数据被传到View层渲染,最终生成一个HTML文件通过HTTP/S协议返回给浏览器,浏览器进行展示。

  现阶段也有很多公司将数据渲染这一过程放在Node中间层完成,以提升后台的处理速度和服务端通用性(不同类型的终端如浏览器,PC端,App端等都可以访问相同的服务端数据),这里不展开说明。

  【比较】

  各种语言都有各自的模板引擎,大家可以根据自己的开发语言在Google中搜索,比如Java:Java Top template engines。

  现阶段比较常用的就是Apache Velocity,Apache FreeMarker,Thymeleaf等。

  历史上比较流行的JSP在市场应该有不小的存量,但是由于这种模板引擎的View层面也包含了java业务代码,所以既无法做到前后端开发的完全分离,也无法做到资源的动静分离,在web服务体量越来越大的今天,我们强调解耦,强调微服务,这种糅杂的开发模式是注定会被淘汰的。所以到了现阶段,我们都要避免使用JSP(当然为了了解web服务的原理也不好完全排斥JSP与Servlet相关的内容),不仅因为这个框架带来的诸多弊端在今时今日已经不合时宜,更是因为市场上出现了很多更方便更优秀的模板引擎。

  Velocity出现地比较早,早期与SpringMVC结合使用得比较多,是与Jsp同时期流行的产品,与JSP相比,前后端能够分离地更好,但Apache对此项目已经停更多年。现如今更流行的还是Thymeleaf与Freemarker。Thymeleaf对于前端的开发比较友好,能够直接在浏览器查看,不用太依赖后台的服务,在流行的Intellij Idea中SpringBoot类型的项目初始化时也有提供thymeleaf的模板,甚至有很多博客中讲到官方推荐使用Thymeleaf,但是经过查阅官方文档也没有找到类似的说法。不过这已经能看出来Thymeleaf在现如今的web系统开发中占有一席之地。而对于Freemarker,SpringBoot也是做了支持,只不过没有Thymeleaf流行。网上关于两者的比较和争论也很多,这里不再过多介绍。关于这几种常见的模板引擎的比较,网络上的分析文章也很多了,这里就不做赘述。

  以上比较了各个Java模板引擎的产品,但是如果我们只是做源代码生成的工具,其实考虑更多的还是我们自己怎么使用和维护更方便。不用拘泥于一种产品,多多比较和体验,才能更加开阔视野。

发表回复

您的电子邮箱地址不会被公开。