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#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
  2. 在.NET中实现Actor模型的不同方式
  3. linux下根据进程号PID查找程序路径
  4. vue项目-封装API接口
  5. 使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API
  6. Adroid新增硬件编解码
  7. 惊!字节实习生竟干这事到凌晨三点
  8. _DataStructure_C_Impl:共享栈
  9. 老外写的关于协程的性能文章-主打http协议
  10. paip.asp 项目流程及管理工具总结
  11. SolidWorks模型分享:皮带轮 免费模型下载
  12. PHP案例-精彩商城教学
  13. 鸢尾花完整的python代码_带“鸢”的诗句大全
  14. 接口防止重复提交,订单避免重复下单
  15. Ubuntu18中安装Nvidia驱动和CUDA和cuDNN库加速
  16. 7.PCIE配置空间读写软件
  17. 开发一个 app 有多难?需要多少钱?
  18. 文件下载及解决中文名乱码问题
  19. 形容linux技术视野的词,火焰图:全局视野的Linux性能剖析
  20. 英语不好可以学JAVA吗?来听大咖的建议

热门文章

  1. 构建Xen实例之创建DomU
  2. Android中级——屏幕和绘图
  3. minheight能继承吗_css的min-height属性怎么用
  4. 斯坦福音乐计算机,斯坦福大学音乐硕士申请条件是什么
  5. C语言数据结构-动态数组
  6. 【优化算法】蜂虎狩猎 (BEH) 算法【含Matlab源码 2278期】
  7. 基于蜂虎狩猎 (BEH) 算法求解单目标优化问题附matlab代码
  8. matlab 用Q-Q图检验某组数据是否服从正态分布 qqplot
  9. 蓝桥杯常用算法知识点:【递归】n个球中取m个,有多少种取法?
  10. 架构师必看:谈软件架构师如何做好架构设计(上)