歡迎光臨
每天分享高質量文章

Java VS .NET:Java與.NET的特點對比

作者: ken-io

連結:https://www.cnblogs.com/ken-io/p/java-vs-dotnet.html

一、前言

  • 為什麼要寫Java跟.NET對比?

 

.NET出生之後就帶著Java的影子。從模仿到創新,.NET平臺也越來越成熟。他們不同的支持者也經常因為孰弱孰強的問題爭論不休。但是本文並不是為了一分高下。而是針對Java平臺跟.NET平臺做一些對比。主要圍繞專案構建、Web框架、專案部署展開討論。相信經過這些討論可以讓Java/.NET工程師對Java平臺、.NET平臺有更好的瞭解。

二、專案構建

  • 專案構建工具

 

工欲善其事必先利其器。開發環境配置+工具使用當然要先講了。

 

1、錶面上的工具

 

平臺 工具 ken.io的解釋
.NET Visual Studio 微軟官方IDE,它具備了開發.NET應用程式的幾乎所有工具
Java Idea/Eclipse IDE,負責管理專案以及程式碼的執行除錯等,依賴於JDK
Java Maven 負責管理專案模板、打包(jar包等),依賴於JDK
Java JDK JRE(Java專案執行環境),Java工具(編譯器等)

 

.NET工程師要開展工作,安裝Visual Studio(後面簡稱:VS)就可以進行開發了。但是Java開發,只安裝IDE是不行的,就算某些IDE會自動安裝JDK,甚至是Maven,但是這些還是需要自己配置,不然還可能會踩坑。從開發環境的配置來說,.NET工程師操作上確實簡單一些,一直下一步,等待安裝完成即可。Java工程師就先要瞭解下工具,以及各個工具的職責。然後逐一配置。

 

從這個點上來說,Java的入門曲線會稍陡一些,但是Java工程師也會比.NET工程師更早關註到專案構建的重要環節。

 

2、實際上的工具

 

職責 .NET平臺 Java平臺 ken.io的解釋
專案管理 VS IDEA/Eclips .NET只有微軟官方IDE,Java沒有官方的IDE,沒有VS好用,但是有多個選擇
專案模板 VS+MSBuild IDE+Maven .NET專案的模板是VS自帶的,是直接符合MSBuild(編譯器)標準的,專案由sln+csproj檔案組織,Java平臺編譯器的標準是公開的,目前主流專案都是基於Maven模板來建立,專案由pom.xml檔案組織。
編譯&除錯 VS+MSBuild+SDK IDE+Maven+SDK .NET平臺的編譯器是獨立的,Java平臺的編譯器是整合在JDK中,Maven模板的專案是由pom.xml檔案組織,但是編譯器並不是認識pom.xml,所以編譯需要Maven的參與
Package管理 NuGet Maven Nuget是微軟官方開源的VS外掛,Maven是Apache下的開源專案。ken.io覺得Maven更靈活、強大。NuGet容易上手。
打包/釋出 VS+MSBuild+SDK IDE+Maven+SDK .NET平臺的編譯器是獨立的,Java平臺的編譯器是整合在JDK中,Maven模板的專案是由pom.xml檔案組織的,但是編譯器並不是認識pom.xml,所以打包需要Maven的參與。IDE主要是提供圖形化介面替代命令操作

 

從專案管理上說。VS這個IDE更好用一些,專案模板上,.NET專案模板由於有Visual Studio的存在,可以說簡單易用而且豐富,Java平臺的Maven模板靈活。

 

其實大部分差異都是編譯器跟模板帶來的差異。.NET平臺的編譯器是獨立的,編譯器MSBuild有一套標準, 而且Visual Studio提供了豐富好用的專案模板。

 

Java平臺的編譯器的編譯配置是xml檔案,由於Java官方沒有專案模板,IDE只負責幫你組織專案,但是並沒有模板,你可以將任意目錄指定為SourceRoot(程式碼根目錄),ResourceRoot(資源檔案根目錄:比如配置檔案)也可以任意指定,編譯的時候,IDE會將你的專案程式碼,以及編譯器所需要的編譯描述/配置xml檔案告訴編譯器該如何編譯你的專案。確實非常靈活,但是也增加了專案管理的成本。包的管理也非常麻煩,還好有Maven結束了這個混沌的Java世界。

 

  • 編碼特點

 

.NET Java
類的組織 namespace:名稱空間,name跟目錄無關 Package:name跟目錄名一致
.cs檔案:類名跟檔案名無關 .java檔案,類名跟檔案名無關,但一個類檔案只能定義一個public類
編譯產出 .dll,.exe檔案 .jar,.war檔案

三、框架

.NET的Web框架基本上都是微軟官方的,官方的框架也最為流行,而Java平臺,除了官方提供的Servlet API(相當於.NET的System.Web)其他的基本都由Spring大家族統治了。本次我們主要對比目前Web開發最常用的MVC框架以及持久層框架

 

功能 .NET Java ken.io的說明
Web核心 ASP.NET Servlet
Web框架 ASP.NET MVC Spring MVC ASP.NET MVC是微軟官方框架,Srping MVC框架隸屬於Spring大家族,依賴於Spring
檢視引擎 Razor Thymeleaf/FreeMarker Razor是微軟官方的檢視引擎,非常好用,Spring MVC並沒有檢視引擎,但是有Thymeleaf,FreeMarker。ken.io更喜歡Razor的風格
持久層 Entity Framework MyBatis EF是微軟官方的持久層框架,易上手、開發效率高、但侵入性強。MyBatis配置靈活,無侵入性。各有利弊。

 

.NET平臺的框架由於都是微軟官方的,比較好組織,上手容易。Java平臺的框架,靈活可配置。這也是Java平臺一貫的風格。但是ken.io不得不吐槽的是,Spring MVC作為一個MVC框架,竟然沒有自己的檢視引擎,那MVC種的View去哪了?


可能是因為Java作為Web後端的主力平臺,確實很少關註檢視層,但是Spring MVC沒有View層引擎,還是感覺不合適。Thymeleaf跟FreeMarker,ken.io更推薦FreeMarker。因為ken.io更喜歡FreeMaker的語法。可能是用慣了Razor的緣故。

、專案部署

對於專案部署。.NET平臺貌似沒得選,只能選Windows+IIS,雖然有Mono,但畢竟不是支援所有的類庫。而Java平臺既可以選擇Windows+Tomcat,也可以選擇Linux+Tomcat。但是通常會選擇Linux+Tomcat畢竟成本低。

 

職責 .NET Java
作業系統 Windows Server Windows Server、Linux Server
Web伺服器 IIS Tomcat(Tomcat是目前最主流的,也有其他的Servlet容易例如:JBoss)

 

不過Java平臺的特性,Java專案的部署會比.NET專案部署偏麻煩一些。


IIS圖形化介面一直下一步,再調整下應用程式池的版本就行了。而Tomcat不論是在Windows,還是在Linux,都透過修改配置檔案完成站點配置。

五、後記

  • 總結

 

不管是Java平臺還是.NET平臺都有各自的優勢。平臺只是一個工具,我們瞭解平臺都是為了做出更好的選擇。但不得不說,Java開源生態的發展勢頭迅猛,非其他平臺可比,不過.NET平臺也在彌補自己的短板而推出了.NET Core。期望以後不論是Java還是.NET都能欣欣向榮。

  • 備註

.NET程式猿,如果要學習Java,可以看看ken.io寫的教程https://ken.io/

Java快速入門系列教程:https://ken.io/serie/java-quickstart

Spring Boot入門教程:https://ken.io/serie/springboot-course-basic

Java程式猿,如果想學習.NET,建議從.NET Core入手:

.NET Core快速入門教程:http://www.cnblogs.com/ken-io/p/dotnet-core-quickstart.html

已同步到看一看
贊(2)

分享創造快樂