一起谈.NET技术,浅谈ASP.NET MVC

简介: 在正式的工作中使用ASP.NET MVC也有一阵子了,也看了听了很多关于ASP.NET MVC别人的想法和代码,我认为很多人对于它的理解是错误的。在这里我只谈谈对ASP.NET MVC我的一些想法,希望大家多多讨论。

在正式的工作中使用ASP.NET MVC也有一阵子了,也看了听了很多关于ASP.NET MVC别人的想法和代码,我认为很多人对于它的理解是错误的。

在这里我只谈谈对ASP.NET MVC我的一些想法,希望大家多多讨论。

1. ASP.NET MVC区别于ASP.NET在于设计理念

我听过的关于ASP.NET  MVC的第一个看法是ASP.NET MVC最大的特点在于Controller和View的分离,当时我还不懂ASP.NET MVC是什么东西,但是当我第一眼看到这个框架时,我就认为这个观点是错误的,我认为ASP.NET MVC最大的特点,也是最大的优点是由Controller来驱动整个项目的开发进展

我们知道,在一个项目的面向对象分析与设计过程中,我们一直都在围绕着人,可能是角色,也可能是涉众来分析和设计整个项目。人,全都是人!站在整个类设计结构最上层的就应该是人,然后我们接下来应该去分析这个人有什么特征,我们这个人要做什么(记住,而不是这个人可以做什么)。也就是说,除了人之外,接下来的层次就应该是这个人的行为,也就是整个系统中的Action

好,接下来我们可以回想一下我们最初的ASP.NET Webform时代,我们是如何开发一个系统的,我们写出一堆设计文档,然后美工给我们页面,然后就是我们常说的“套页面”。对于这个做法,也就是我在之前文章中调侃的“PDD”(页面驱动开发)。缺点我就不说了,在前文中我想我已经说得很清楚了。

那么我们想想,其实我们会觉得Webform是个天然为了PDD而生的产物。当提及三层架构时,很多人都有一种看法是ASP.NET本身就是三层的,我们暂且不管这个说法对不对,至少可以说明,很多人都天然地把.aspx.cs当成了其中的一层,这就造成了aspx和aspx.cs这两层的完全耦合性。

但是ASP.NET MVC好在哪里?一个用户访问,并不是在访问某一个页面,而是在访问某一个功能(Action)。这就是面向对象分析的最基础方法。

那么我们在开发ASP.NET MVC时就应该先考虑我们需要哪些功能块,这就是我们的Controller,然后在这个功能块下,我们都需要哪些功能,这就是我们的Action。至于页面,应该是应该由功能来驱动我们的页面开发,这才是Controller驱动整个项目开发的核心!

但是我想仍然有很多公司在用开发ASP.NET时的那一套PDD来开发整个项目,我想,这就是没有掌握到ASP.NET MVC的精髓之所在吧。

ASP.NET MVC要点一:先开发Controller,页面完全可是先束之高阁,由Controller而不是Page来驱动整个项目开发。

2. Controller的代码组织

在整体的架构中,个人认为Controller更像一个Facade,他提供给用户一个访问接口,在这个接口背后是复杂的业务逻辑

但是我看到很多公司的代码都在Controller掺杂进了复杂的业务逻辑,甚至会出现了几百行,几千行的Controller,这是我没办法理解的。

让我们想想Facade,他的目的是这样的:定义一个高层接口,这个接口使这一子系统更加容易使用

在我看来应该注意这样几点:

A. Controller中不应该包含任何private和protected方法,一个Facade类只应该由对外暴露的方法,他只是对其他类方法的整合

B. Action不应该处理任何细节方面的逻辑。个人认为,每个方法之中仅应包含他下一抽象层次的方法,而不应该出现抽象层次的杂糅以及抽象的层次跳跃

C. Action本身其实就是一个方法,正如代码规范上所说的,方法应该只是动词或者动宾短语,而不应该出现名词作为方法名的情况。因为用户是希望做某一项动作,而不是得到某一种东西

3. 最后

本来感觉有好多话想说,可是写着写着却发现不知道该写什么了,下次再说吧。

最后,个人建议,学习ASP.NET MVC可以参考一下Java界的一些成熟思路,有些其实和ASP.NET MVC非常像,比如Struts,还有Spring MVC。

打算接下来的时间看一下。欢迎大家共同讨论学习。

目录
相关文章
|
3月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
71 0
|
3月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
37 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
63 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
99 5
|
5月前
|
开发框架 自然语言处理 前端开发
基于ASP.NET MVC开发的、开源的个人博客系统
基于ASP.NET MVC开发的、开源的个人博客系统
52 0