.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均在使用,没有黑任何一个平台的意图。
若是有朋友不一样意本文的观点,欢迎评论交流,默默的点了反对,我也不知道您为何反对,是吧?