.NET出生以後就帶着Java的影子。從模仿到創新,.NET平臺也愈來愈成熟。他們不一樣的支持者也常常由於孰弱孰強的問題爭論不休。可是本文並非爲了一分高下。而是針對Java平臺跟.NET平臺作一些對比。主要圍繞項目構建、Web框架、項目部署展開討論。相信通過這些討論可讓Java/.NET工程師對Java平臺、.NET平臺有更好的瞭解。html
工欲善其事必先利其器。開發環境配置+工具使用固然要先講了。java
一、表面上的工具spring
平臺 | 工具 | 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工程師更早關注到項目構建的重要環節。springboot
二、實際上的工具服務器
職責 | .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框架以及持久層框架ui
功能 | .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寫的教程
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
若是想一塊兒交流技術能夠訪問鏈接掃碼加入QQ羣:https://ken.io/home/about
本文無心引戰,這個在開篇的時候也作過說明。另外,本人.NET,.NET Core,Java均在使用,沒有黑任何一個平臺的意圖。
若是有朋友不一樣意本文的觀點,歡迎評論交流,默默的點了反對,我也不知道您爲何反對,是吧?