我的 Java/C# web 后端开发技术选择

2022-05-17 09:23

 

简单介绍一下,我的 Java/C# web 后端开发技术选择。与网上一般人所用,大不相同。

 

先来一个表格,以下是我常用的Java/C# web 后端开发技术:

我常用的Java/C# web 后端开发技术
技术分类 Java web C# web
数据库 bonecp,commons-dbcp,commons-dbutils Npgsql
网页模板引擎 freemarker,velocity NVelocity
应用日志 commons-logging,slf4j,logback log4net,NLog
配置参数 commons-configuration  
代码简洁化 commons-lang3,commons-io,guava  
定时任务 quartz  
文件上传 commons-fileupload  
前端、后端交互, json 数据 json-lib Newtonsoft.Json
辅助工具 commons-beanutils,commons-codec,commons-collections,commons-pool,commons-vfs2,ezmorph,httpclient,httpcore,jsch,jxl,opencsv,dom4j,rhino ,unboundid-ldapsdk,oro,poi ZXing.Net,FluentFTP,SSH.NET,LumenWorksCsvReader,NPOI,Microsoft Report Viewer Control,NPOI,SharpZipLib
单元测试 junit xUnit.net
公司自写框架/组件 velocityweb common_db,common_uitls

 

数据库层,在 Java 7 引入 try-with-resources 语法之前,代码编写比较繁琐,需要手工 close db-Connection, PreparedStatement, ResultSet。所以一般使用 Apache 的 commons-io,commons-dbutils 来简化此处代码。而在 Java 7 之后,有了 try-with-resources 语法,这种事情就容易处理了。

按理,Java/C# 代码,均应及时关闭数据库的各种资源。但在 C# 编程界,没有像 Java 那样特别强调这方面。猜测可能是因为,Java 编程习惯性地搭配 Oracle 数据库,它需要及时关闭数据库的各种资源,包括 Connection, PreparedStatement, Resul,否则容易出问题。而 C# 习惯性地搭配 MS SQL Server, 不及时关闭数据库的各种资源,好像也不碍事。

因此,此处有一个“软件技术的选择,影响编程思路与习惯”这种老问题。

 

网页模板引擎方面,我习惯于不使用 Java 自带的 JSP/JSTL, 也不使用 ASP.NET 自带的 ASP/Razor,而习惯于使用 Apache velocityNVelocity 这种第三方模板引擎。主要原因,在于第三方引擎,可以兼容多个 web 容器(Tomcat/IIS)的不同版本,可以持续使用很多年。且第三方模板,技术足够简单,容易上手。

当然了,使用这种第三方模板,需要自己写代码,维护一个全局的 static Map, 其 key 为相对网址,Map 为对应的 Java/C# Request Dispatcher 子类。

web template for Apache velocity or NVelocity

 

上表中,Java 编程的配置参数、代码简洁化、定时任务、文件上传等所用第三方 jar 包,在 C# 编程中一般无对应的第三方组件。原因是因为 C# 在自身标准库的功能,简单且功能足够。

定时任务方面,Java web 编程习惯于在固定时间运行定时任务,比如 quartz。而 C# Web 编程常见的做法则是将代码隔离出来,使用 Windows Service 来运行。换句话说,Java web 习惯于将后台线程代码与 web 后端逻辑放在同单个 .war 包中,而 C# web 则习惯于拆分,使用 Windows Service(服务), 或 Windows OS task(操作系统定时任务) 来运行单个 exe 模块。

 

.Net framework 自带 json 解析类,而 Java JRE/JDK 则缺少此类功能,需要使用第三方组件包。

因前端网页编程,我一般使用 jqGrid, 基于 json 数据格式,进行 web 前后端数据传输查询翻页表格数据。所以,表格中的 Java web 与 C# web ,均使用了 json 组件。

 

单元测试方面,Java 编程有使用 JUnit 的习惯,而 C# 编程这方面的习惯较少,一般都是人工在界面上测试。这方面的差异,大概是 Java 编程界,更喜欢折腾、更经常重构代码,频繁大批量更改代码,导致 JUnit 必不可少。

 

基于 transaction-per-request 的 web 编程模式,是很常见的。我很奇怪,Java web 与 Asp.Net 均未提供对应的功能。没办法,只能自己写一些简单的框架/组件,来达到这个功能。

Velocityweb 是我自己的写的一个 Java 框架,早期版本放在 http://velocityweb.sourceforge.net/ 。后续更新未上传到 sourceforge.net 网站上去。基于 transaction-per-request 的 web 编程模式,结合 velocity 的一些常用功能。

 

 

欢迎转载,转载请注明出处: https://www.zheguisoft.com/staff_blogs/jacklondon_chen/2022 ,https://my.oschina.net/jacklondon

 

 

 


请选择网站语言: