C# 是微软出品对标 Java 的语言,在 web 开发方面,二者都在表现层实现了自己的 MVC 框架。从一个简单的项目开始对比,看看二者有何差异。

项目结构

首先来看由 SpringBoot 生成的 MVC 项目模板(勾选了 web、Thymeleaf 、mybatis),controller、model 文件夹与 SpringBoot 项目主文件 XXspringbootApplication 位于同一目录下,view 文件位于应用 Thymeleaf 模板文件夹(templates)下。

再看官配编辑器 VS 生成的 ASP.NET MVC 基本项目。controller、model 、view 文件夹位于同一级,每一个 controller 有对应的model 、view 子文件夹。

结论,相对来说,由 VS 生成的 ASP.NET MVC 基本项目文件目录结构完整,不需要再手动添加文件或者代码,直接可以跑起一个 HelloWorld 网页。而由 SpringBoot 生成的 MVC 项目模板,还需要自己手动添加 controller、model 、view 文件,相对来说更为繁琐。

Controller 差异

Spring MVC 控制器通过@Controller 注解和普通的类区分,没有默认的文件路径,而控制器中的方法对应前端发送的请求,@RequestMapping(path = "hi",method = RequestMethod.GET) 注解 来定义控制器访问路径、对应的请求方式。未在类上添加@RestController、方法上添加 @ResponseBody 注解,则 public String hi() 返回的是视图名称。当返回值为 void 时(例:public void hi() )默认返回与方法名称同名的视图。

@Controller
public class HiController {@RequestMapping("hi")public String hi(){return "index";}
}

ASP.NET MVC 中所有的控制器都 继承 自 Controller 类,默认以 XX+Controller 为控制器名称,默认以控制器前缀(除 Controller 部分)为访问路径,访问对应的方法为「/Home/Index」控制器名称+对应的方法名称。请求方式通过注解方式声明,默认为所有请求方法都响应。在方法的返回值方面,ActionResult 是 ASP.NET MVC 所封装的抽象类,可以返回视图、Json 等多种类型。当方法放回值为 void 时不会有默认返回页面。return View() 会返回 VIEW 文件下 Home 文件夹(与控制器名称一致)的 Index.cshtml 视图(文件名与方法名称一致)。

public class HomeController : Controller // 继承{[HttpGet] // 显式声明,默认为都响应public ActionResult Index(){return View();}

Model 差异

在 Spring MVC 中,Model 层和普通的 JavaBean 一样,更多的是定义 view 所需要的数据模型

而在 ASP.NET MVC ,Model 层位于同一目录下,建立 model 文件时,会自动引入 using System.ComponentModel.DataAnnotations; 可以让我们使用注解配合 jquery.validate.js 在 view 层对数据进行验证或别名展示,在表现层对数据进行多重验证,确保最终获取或发送数据有效。

public class SetPasswordViewModel{[Required][StringLength(100, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = 6)] // 定义字段的取值范围以及出错提示信息[DataType(DataType.Password)][Display(Name = "新密码")]public string NewPassword { get; set; }[DataType(DataType.Password)][Display(Name = "确认新密码")][Compare("NewPassword", ErrorMessage = "新密码和确认密码不匹配。")]public string ConfirmPassword { get; set; }}

VIEW 差异

在 Spring MVC 中,可以在 VIEW 层使用 EL 表达式,有限的使用 Java 编写代码,通常以${} 表示,内置了 Page PageScope、Request、RequestScope、Session、SessionScope、Application 等变量。

而 ASP.NET MVC 在视图层提供的功能很强大,Razor 标题语法可以任意的 HTML 插入 C# 语句,只需要在 C# 语句前加上「@」符号即可。同时也可以在 C# 语句块中写入 HTML 语句,在页面加载时会只能感知以区分 C# 语句和 HTML 语句。

<ul>
@for (int i = 0; i < 10; i++) {
<li>@i</li>
}
</ul>

同时 ASP.NET MVC 也提供了一系列 HTML 辅助方法,减少了 JavaScript 的工作量,更容易和后台交互。

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })){@Html.AntiForgeryToken()<h4>使用本地帐户登录。</h4><hr />@Html.ValidationSummary(true, "", new { @class = "text-danger" })<div class="form-group">@Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })<div class="col-md-10">@Html.TextBoxFor(m => m.Email, new { @class = "form-control" })@Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" })</div></div>}

总结

C# 之前的闭源和 Java 的开源,再加上发布时间的落后于 Java,导致 C# 和 Java 再编程语言的流行排行差异巨大。

还一部份原因是,C# 的社区远不如 Java 活跃,国内除了 MSDN 官方找不到什么合适的学习资源,而 MSDN 官网的资源不是很适合入门。对于入门的人来说,遇到问题不知道该如何解决,也没有合适的学习资源。

C# 对于细节方面屏蔽的更多,程序员只需要关注自己业务的需要即可,很少需要配置,而 Java 的开发相对繁琐(不使用 SpringBoot 手动配置的部分更多),需要注意更多的细节。

总而言之,言而总之,做为个人项目的开发我会选择 C# 因为可以节省更多的时间来开发自己项目,但是要系统的学习后端开发,我更推荐学习 Java,自己手动实现一些细节会让你对项目的理解更为深刻。

ASP.NET MVC vs Spring MVC相关推荐

  1. MVC 和Spring MVC

    MVC 和Spring MVC 我们都知道常说的MVC指的是 Model + View + Controller(数据模型 + 视图+ 控制器) 三层架构指的是:(展现层 + 应用层 + 数据访问层) ...

  2. Spring MVC - 配置Spring MVC

    写在前面的话: 现在开始一段新的学习历程:Spring MVC.还是按照原来的三步走学习模式(what.why.how)进行讲解. 1.Spring MVC是什么(what) Spring MVC属于 ...

  3. 【MVC、Spring MVC介绍、区别、执行流程】

    介绍 MVC(Model-View-Controller)是一种软件架构模式,其中应用程序被划分为三个部分:模型(Model).视图(View)和控制器(Controller).MVC框架的主要目标是 ...

  4. Java Web系列:Spring MVC基础

    1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是一样的方法.框架只能在技术层 ...

  5. Spring MVC 学习总结(一)——MVC概要与环境配置 转载自【张果】博客

    Spring MVC 学习总结(一)--MVC概要与环境配置 目录 一.MVC概要 二.Spring MVC介绍 三.第一个Spring MVC 项目:Hello World 3.1.通过Maven新 ...

  6. spring mvc velocity 配置备忘

    2019独角兽企业重金招聘Python工程师标准>>> Spring里面最重要的概念是IOC和AOP,还有两项很重要的模块是事务和MVC,对于IOC和AOP,我们要深究其源码实现,对 ...

  7. Spring MVC 相关资料整理

    来源于:http://www.cnblogs.com/ylhssn/p/4062757.html 1.概述 Spring MVC是一种基于Java实现MVC设计模式的请求驱动类型的轻量级Web框架,即 ...

  8. 通过项目逐步深入了解Spring MVC(一)

    相关阅读: 本文档和项目代码地址:https://github.com/zhisheng17/springmvc 转载请注明出处和保留以上文字! 了解 Spring: Spring 官网:http:/ ...

  9. 就是这么简单(续)!使用 RestAssuredMockMvc 测试 Spring MVC Controllers(转)

    接我前面一篇文章关于RestAssured测试Restful web service的, RestAssured还有一个功能, 使用RestAssuredMockMvc 单元测试你的Spring MV ...

最新文章

  1. 实战|C++在vscode上的调试配置
  2. webpack + loader 使用笔记
  3. redis入门系列(一)redis安装部署
  4. html表格鼠标高亮行列,JS实现的表格行鼠标点击高亮效果代码
  5. 在python程序中的进程操作
  6. IIS中的 Asp.Net Core 和 dotnet watch
  7. select选中的值_selenium下拉框处理(select)
  8. Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean 解决方案
  9. Dubbo学习总结(6)——Dubbo开源现状与未来规划
  10. 响应服务器535 5.7.1 unab,带有Gmail的JavaMail:535-5.7.1不接受用户名和密码
  11. 脑机互联不是梦,最新脑机接口发布:智能手机可操控!
  12. 无悔入华夏怎么一直显示服务器,无悔入华夏祭祀玩法怎么玩 无悔入华夏祭祀怎么触发?...
  13. 适合于小团队且周期短的产品迭代的APP测试流程
  14. 加/减/乘/除 下的取余
  15. 20行代码简单python爬虫,爬虫实例
  16. 二叉树:前序与后序、前序与中序以及中序与后序相同、相反的特征
  17. 在线html排版网页排版,40张网页排版设计案例,总有一款你会用得上
  18. 威尔特拉斯定理_维尔斯特拉斯函数-魏尔斯特拉斯给出的那个函数是什么此函数处处连续但处处不可导,我只 爱问知识人...
  19. win10开机自动拨号上网
  20. Project:解决问题:在Microsoft project2016中如何编辑一周七天工作日

热门文章

  1. 15年美亚杯电子取证
  2. 2019,记录生活、记录自己
  3. vite打包类库的时候,总包和子包区分打包,怎么打包出来的都是总包的内容
  4. 证书转换-SSL证书生成:cer,jks文件 韩俊强的博客
  5. 如何将.crt文件转换为.cer格式
  6. Linux网络操作系统安装工具UNetbootin
  7. 以Arduino编写伺服插补控制及C#上位机的阿基米德螺旋线检测
  8. 赵沁平院士:扎实推荐虚拟现实产业健康发展
  9. iOS 16 中 CoreData 托管对象发生变化但其衍生 (Derived) 属性在 SwiftUI 中不刷新的解决
  10. 什么是HttpClient