Java VS .NET:Java与.NET的特点对比
一、前言
- 為什么要寫Java跟.NET對(duì)比?
.NET出生之后就帶著Java的影子。從模仿到創(chuàng)新,.NET平臺(tái)也越來越成熟。他們不同的支持者也經(jīng)常因?yàn)槭肴跏霃?qiáng)的問題爭(zhēng)論不休。但是本文并不是為了一分高下。而是針對(duì)Java平臺(tái)跟.NET平臺(tái)做一些對(duì)比。主要圍繞項(xiàng)目構(gòu)建、Web框架、項(xiàng)目部署展開討論。相信經(jīng)過這些討論可以讓Java/.NET工程師對(duì)Java平臺(tái)、.NET平臺(tái)有更好的了解。
二、項(xiàng)目構(gòu)建
- 項(xiàng)目構(gòu)建工具
工欲善其事必先利其器。開發(fā)環(huán)境配置+工具使用當(dāng)然要先講了。
1、表面上的工具
| .NET | Visual Studio | 微軟官方IDE,它具備了開發(fā).NET應(yīng)用程序的幾乎所有工具 |
| Java | Idea/Eclipse | IDE,負(fù)責(zé)管理項(xiàng)目以及代碼的運(yùn)行調(diào)試等,依賴于JDK |
| Java | Maven | 負(fù)責(zé)管理項(xiàng)目模板、打包(jar包等),依賴于JDK |
| Java | JDK | JRE(Java項(xiàng)目運(yùn)行環(huán)境),Java工具(編譯器等) |
.NET工程師要開展工作,安裝Visual Studio(后面簡(jiǎn)稱:VS)就可以進(jìn)行開發(fā)了。但是Java開發(fā),只安裝IDE是不行的,就算某些IDE會(huì)自動(dòng)安裝JDK,甚至是Maven,但是這些還是需要自己配置,不然還可能會(huì)踩坑。從開發(fā)環(huán)境的配置來說,.NET工程師操作上確實(shí)簡(jiǎn)單一些,一直下一步,等待安裝完成即可。Java工程師就先要了解下工具,以及各個(gè)工具的職責(zé)。然后逐一配置。
從這個(gè)點(diǎn)上來說,Java的入門曲線會(huì)稍陡一些,但是Java工程師也會(huì)比.NET工程師更早關(guān)注到項(xiàng)目構(gòu)建的重要環(huán)節(jié)。
2、實(shí)際上的工具
| 項(xiàng)目管理 | VS | IDEA/Eclips | .NET只有微軟官方IDE,Java沒有官方的IDE,沒有VS好用,但是有多個(gè)選擇 |
| 項(xiàng)目模板 | VS+MSBuild | IDE+Maven | .NET項(xiàng)目的模板是VS自帶的,是直接符合MSBuild(編譯器)標(biāo)準(zhǔn)的,項(xiàng)目由sln+csproj文件組織,Java平臺(tái)編譯器的標(biāo)準(zhǔn)是公開的,目前主流項(xiàng)目都是基于Maven模板來創(chuàng)建,項(xiàng)目由pom.xml文件組織。 |
| 編譯&調(diào)試 | VS+MSBuild+SDK | IDE+Maven+SDK | .NET平臺(tái)的編譯器是獨(dú)立的,Java平臺(tái)的編譯器是集成在JDK中,Maven模板的項(xiàng)目是由pom.xml文件組織,但是編譯器并不是認(rèn)識(shí)pom.xml,所以編譯需要Maven的參與 |
| Package管理 | NuGet | Maven | Nuget是微軟官方開源的VS插件,Maven是Apache下的開源項(xiàng)目。ken.io覺得Maven更靈活、強(qiáng)大。NuGet容易上手。 |
| 打包/發(fā)布 | VS+MSBuild+SDK | IDE+Maven+SDK | .NET平臺(tái)的編譯器是獨(dú)立的,Java平臺(tái)的編譯器是集成在JDK中,Maven模板的項(xiàng)目是由pom.xml文件組織的,但是編譯器并不是認(rèn)識(shí)pom.xml,所以打包需要Maven的參與。IDE主要是提供圖形化界面替代命令操作 |
從項(xiàng)目管理上說。VS這個(gè)IDE更好用一些,項(xiàng)目模板上,.NET項(xiàng)目模板由于有Visual Studio的存在,可以說簡(jiǎn)單易用而且豐富,Java平臺(tái)的Maven模板靈活。
其實(shí)大部分差異都是編譯器跟模板帶來的差異。.NET平臺(tái)的編譯器是獨(dú)立的,編譯器MSBuild有一套標(biāo)準(zhǔn), 而且Visual Studio提供了豐富好用的項(xiàng)目模板。
Java平臺(tái)的編譯器的編譯配置是xml文檔,由于Java官方?jīng)]有項(xiàng)目模板,IDE只負(fù)責(zé)幫你組織項(xiàng)目,但是并沒有模板,你可以將任意目錄指定為SourceRoot(代碼根目錄),ResourceRoot(資源文件根目錄:比如配置文件)也可以任意指定,編譯的時(shí)候,IDE會(huì)將你的項(xiàng)目代碼,以及編譯器所需要的編譯描述/配置xml文檔告訴編譯器該如何編譯你的項(xiàng)目。確實(shí)非常靈活,但是也增加了項(xiàng)目管理的成本。包的管理也非常麻煩,還好有Maven結(jié)束了這個(gè)混沌的Java世界。
- 編碼特點(diǎn)
| 類的組織 | namespace:命名空間,name跟目錄無關(guān) | Package:name跟目錄名一致 |
| 類 | .cs文件:類名跟文件名無關(guān) | .java文件,類名跟文件名無關(guān),但一個(gè)類文件只能定義一個(gè)public類 |
| 編譯產(chǎn)出 | .dll,.exe文件 | .jar,.war文件 |
三、框架
.NET的Web框架基本上都是微軟官方的,官方的框架也最為流行,而Java平臺(tái),除了官方提供的Servlet API(相當(dāng)于.NET的System.Web)其他的基本都由Spring大家族統(tǒng)治了。本次我們主要對(duì)比目前Web開發(fā)最常用的MVC框架以及持久層框架
| 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的風(fēng)格 |
| 持久層 | Entity Framework | MyBatis | EF是微軟官方的持久層框架,易上手、開發(fā)效率高、但侵入性強(qiáng)。MyBatis配置靈活,無侵入性。各有利弊。 |
.NET平臺(tái)的框架由于都是微軟官方的,比較好組織,上手容易。Java平臺(tái)的框架,靈活可配置。這也是Java平臺(tái)一貫的風(fēng)格。但是ken.io不得不吐槽的是,Spring MVC作為一個(gè)MVC框架,竟然沒有自己的視圖引擎,那MVC種的View去哪了?
可能是因?yàn)镴ava作為Web后端的主力平臺(tái),確實(shí)很少關(guān)注視圖層,但是Spring MVC沒有View層引擎,還是感覺不合適。Thymeleaf跟FreeMarker,ken.io更推薦FreeMarker。因?yàn)閗en.io更喜歡FreeMaker的語法。可能是用慣了Razor的緣故。
四、項(xiàng)目部署
對(duì)于項(xiàng)目部署。.NET平臺(tái)貌似沒得選,只能選Windows+IIS,雖然有Mono,但畢竟不是支持所有的類庫。而Java平臺(tái)既可以選擇Windows+Tomcat,也可以選擇Linux+Tomcat。但是通常會(huì)選擇Linux+Tomcat畢竟成本低。
| 操作系統(tǒng) | Windows Server | Windows Server、Linux Server |
| Web服務(wù)器 | IIS | Tomcat(Tomcat是目前最主流的,也有其他的Servlet容易例如:JBoss) |
不過Java平臺(tái)的特性,Java項(xiàng)目的部署會(huì)比.NET項(xiàng)目部署偏麻煩一些。
IIS圖形化界面一直下一步,再調(diào)整下應(yīng)用程序池的版本就行了。而Tomcat不論是在Windows,還是在Linux,都通過修改配置文件完成站點(diǎn)配置。
五、后記
- 總結(jié)
不管是Java平臺(tái)還是.NET平臺(tái)都有各自的優(yōu)勢(shì)。平臺(tái)只是一個(gè)工具,我們了解平臺(tái)都是為了做出更好的選擇。但不得不說,Java開源生態(tài)的發(fā)展勢(shì)頭迅猛,非其他平臺(tái)可比,不過.NET平臺(tái)也在彌補(bǔ)自己的短板而推出了.NET Core。期望以后不論是Java還是.NET都能欣欣向榮。
- 備注
.NET程序猿,如果要學(xué)習(xí)Java,可以看看ken.io寫的教程
Java快速入門系列教程:https://ken.io/serie/java-quickstart
Spring Boot入門教程:https://ken.io/serie/springboot-course-basic
Java程序猿,如果想學(xué)習(xí).NET,建議從.NET Core入手:
.NET Core快速入門教程:http://www.cnblogs.com/ken-io/p/dotnet-core-quickstart.html
如果想一起交流技術(shù)可以訪問連接掃碼加入QQ群:https://ken.io/home/about
- 本文首次發(fā)布:2017-07-31
- 本文原文鏈接:https://ken.io/note/java-vs-dotnet
本文無意引戰(zhàn),這個(gè)在開篇的時(shí)候也做過說明。另外,本人.NET,.NET Core,Java均在使用,沒有黑任何一個(gè)平臺(tái)的意圖。
如果有朋友不同意本文的觀點(diǎn),歡迎評(píng)論交流,默默的點(diǎn)了反對(duì),我也不知道您為什么反對(duì),是吧?
轉(zhuǎn)載于:https://www.cnblogs.com/zlero/p/8608422.html
總結(jié)
以上是生活随笔為你收集整理的Java VS .NET:Java与.NET的特点对比的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos6.x安装mysql5.6及
- 下一篇: c#控制IE浏览器自动点击等事件WebB