看了为WebForms说几句话,以及一些ASP.NET开发上的经验(上) 和为 MVC 和 Web Form 正名的一份“大字报” 的相关评论。
MVC作为架构层面的模式大量应用软件开发中,就是采用WebForm方式,大家也都会应用MVC模式去运用。在微软没有计划asp.net mvc之前,在.net社区中也存在多种MVC模式的asp.net 实现,例如Maverick.NET,MonoRail等。就是使用webform做开发,都是尽量按照MVC模式进行软件的开发,在msdn也有相应的文章Page Controller(页面控制器)和FrontController(前端控制器),这些文章都是2004年的老文章了,当有人向微软相关人士询问asp.net为什么没有对mvc提供支持,ms人士的回答是:aspx和aspx.cs页面就是mvc模式了。
MVC模式本来是架构层面的一个架构模式,不是WebForms和MVC的根本区别。只是他们对MVC的支持程度的问题。同一个问题有多种解决方案是非常好的事,我们所处的微软生态环境下,扮演的是微软的好孩子,开源社区有非常好的解决方案在微软插足的时候不会得到应有的重视。难道这是国内的.net区别java的最大特点。MonoRail在社区已经存在多年,而且社区(国外)很活跃,上面也有非常的应用。然而在国内并不活跃,我算是活跃分子,我一直在关注.net开源社区,monorail我自然也在使用,当然我也在使用webform。当然我也一直在Castle框架,Castle框架最大的一个特性当然就是依赖注入的IOC了,这是一个重要的设计模式。微软到目前为止还没有提供足够的支持,当然微软现在在行动,微软的架构和模式团队开发的企业类库,大家一定非常的熟悉,在微软Enterprise Library 1.0只是将几个常使用模块组合起来,各个模块之间的依赖关系非常的强,也就是耦合性非常强,微软Enterprise Library 2.0同样这几个模块,但是做了重新的设计,引入了组件ObjectBuilder,我就写了MS 的IOC容器(ObjectBuilder)?,虽然ObjectBuilder具备了IOC的基本特征,但是他同Castle框架比起来相差太远了,Castle可以是完整的开发框架,微软Enterprise Library 4.0将支持依赖注入 。是否还需要来讨论依赖注入是否值得?
Feedback
"MVC模式不是WebForms和MVC的根本区别。只是他们对MVC的支持程度的问题".
同意
不知为何很多人将Web Forms和MVC对立起来。
“"MVC模式不是WebForms和MVC的根本区别。只是他们对MVC的支持程度的问题"”
确实他们是一同父异母的两种模式,没有本质区别,只是在应用层面上和开发时产生的区别,至于好多人一看到“Web Forms和MVC”就以为是要谈他们多对立,我也十分不解。
我能想到的可能是VS2008里面把两种项目的方案独立起来了,让大家产生了这样的感觉。
补充一点,我其实更愿意讨论在同一种应用背景下,Web Forms和MVC的适应性
如果说要开发一个高性能的企业及应用的话,我会选择MVC
当然对于我的行业来说,BI搭配WebForm足够了
表面上,webform和mvc只是表现层,他们只占软件架构中的一小部分。
但是在他们的背后呢?
用webform,后面通常会是控件,dataset,存储过程。开发者强调快速开发,运行性能。
用mvc,后面多数会有ioc,orm。开发者强调解耦,分离关注点。我想 monorail -> dataset -> 存储过程 这样的架构是几乎不会存在的。
选择webform或mvc取决于程序员的价值观。所以 webform 和 mvc 的对立实质上是源于 RAD 和 敏捷开发 的对立
@Yok
选择webform或mvc取决于程序员的价值观。
-----------
这个恐怕到时候就不是程序员说的算了,假如,我说的是假如,webform不再有市场(间接)需求了,那么恐怕就不是什么价值观能说明问题的了.
@Yok
在使用技术上,WebForm和MVC没有太大的区别,因为他们共享的空间很大,MVC只是多了一个System.Web.Mvc命名空间内的内容,以及相应的一些Helper的支持,除此以外,基本上都可以是通用的,WebForm可以模仿MVC模式,MVC也同样可以使用WebForm中绝大部分功能(包括ViewState+PostBack,但是不是真正的MVC结构提倡的)。
@Yok
webform和mvc就是纯粹表现层,webform什么地方规定了必须使用dataset,存储过程呢,mvc什么地方有限制死了一定要用ioc,orm呢。
使不使用dataset,存储过程或者ioc,orm那是开发人员自己的习惯决定。
用控件不等于一定要使用datastet和存储过程,我现在就在使用castle+nhibernate+webform效果相当好。
monorail -> dataset -> 存储过程为什么不行,一样的用,也不别扭,开发起来可能感觉类似asp吧(不过说老实话,我不喜欢存储过程)
MVC不是webform的替代品,而是一种很好的补充,MVC本身并不完美,不然java那边也不会出现jsf和Tapestry这样的类似webform的东西了。
我一个做java的牛人同学还经常和我抱怨,他做用MVC做开发最头大的事情就是如何保存页面状态。
--引用--------------------------------------------------
Yok: 表面上,webform和mvc只是表现层,他们只占软件架构中的一小部分。
但是在他们的背后呢?
用webform,后面通常会是控件,dataset,存储过程。开发者强调快速开发,运行性能。
用mvc,后面多数会有ioc,orm。开发者强调解耦,分离关注点。我想 monorail -> dataset -> 存储过程 这样的架构是几乎不会存在的。
选择webform或mvc取决于程序员的价值观。所以 webform 和 mvc 的对立实质上是源于 RAD 和 敏捷开发 的对立
--------------------------------------------------------
不同意,WebForm和MVC既然都是表现层其实就和后面的方式无关了。WebForm没说一定要DataSet,MVC也没说一定要ORM。
@Jeffrey Zhao
你不能否认mvc跟ioc,orm的理念有相似性吧?这就是为什么mvc后面通常会有ioc和orm的原因,我没说WebForm一定要DataSet,MVC一定要ORM,只是通常而已。就好比同时喜欢F4和五月天的人,同时喜欢黑豹和唐朝的人都很常见,但是喜欢F4和黑豹,喜欢五月天和唐朝这样的组合方式就会显得很另类。
所以我说很少会有monorail -> dataset -> 存储过程这种架构。至于killer的webform + castle + nhibernate这种组合,并没有违法我的原则,选用哪个还要取决于团队成员对web客户端开发的熟悉程度,以及是否有美工负责页面制作。但是webform还是以 控件 -> dataset -> 存储过程 的模式为主,习惯这种架构的程序员跟使用mvc的程序员的分歧是最大的
@Yok
mvc跟ioc,orm的理念有相似性?请问哪里相似了?
事实上MVC广泛使用远比ioc,orm要早,我记得2003我参加工作的时候,我一个搞java的同学写jsp就是用Struts这个MVC框架搞开发,那个时候国内基本还没有人用orm,ioc,基本数据库访问就是直接用jdbc,那个时候不也一样的用,也没有人说MVC一定要用ioc,orm。
分离关注点。
03年的时候,javaer们似乎没有多少选择吧?但如果今天的程序员放弃了不用学xhtml就能干web ui的webform而回归到mvc,我想这是最大的原因,至少对我和我的同事们来说是。
--引用--------------------------------------------------
Yok: 分离关注点。
03年的时候,javaer们似乎没有多少选择吧?但如果今天的程序员放弃了不用学xhtml就能干web ui的webform而回归到mvc,我想这是最大的原因,至少对我和我的同事们来说是。
--------------------------------------------------------
"webform而回归到mvc"十分不能理解,能解释一下吗?如果说“ASP.NET回归到ASP”,那么至少还有点逻辑可言(即使无法想象)
--引用--------------------------------------------------
Yok: @Jeffrey Zhao
你不能否认mvc跟ioc,orm的理念有相似性吧?这就是为什么mvc后面通常会有ioc和orm的原因,我没说WebForm一定要DataSet,MVC一定要ORM,只是通常而已。就好比同时喜欢F4和五月天的人,同时喜欢黑豹和唐朝的人都很常见,但是喜欢F4和黑豹,喜欢五月天和唐朝这样的组合方式就会显得很另类。
所以我说很少会有monorail -> dataset -> 存储过程这种架构。至于killer的webform + castle + nhibernate这种组合,并没有违法我的原则,选用哪个还要取决于团队成员对web客户端开发的熟悉程度,以及是否有美工负责页面制作。但是webform还是以 控件 -> dataset -> 存储过程 的模式为主,习惯这种架构的程序员跟使用mvc的程序员的分歧是最大的
--------------------------------------------------------
不知道mvc和ioc/orm的相似性在哪里……
mvc和webforms其实都是表现+业务逻辑的触发而已,并没有涉及业务建模等方面。建模是完全脱离表现层的,表现层(或者说上层)甚至还可以是WebService等等。况且WebForms和ASP.NET MVC在表现层上实现可谓一模一样,控件能照样用,想绑定也可以。使用DataSet/DataTable和WebForms或ASP.NET MVC无关。如果没有自己开发的ORM框架,如果微软在示例里多加一些DataSet绑定,我敢说许多开发人员还是会把DataTable绑定到ASP.NET MVC的View上——还是这句话,从View角度来说它和WebForms没有区别。
来,Yok兄,我来顶你一下!
各位,“理念相同”和“两者相同”是两回事,不要混淆概念啊!
MVC/IoC/ORM当然是在系统的不同层次,当然是不同的东西,自然也谈不上什么相似性了,但大家不会不明白什么是“理念”吧?用来指导我们做事做人的东西为什么就不能相似了?
Castle 整个的中心思想就是 Separation Of Concerns,MVC2是为了让界面和控制逻辑解耦,IoC也是关注点分离,ORM让DomainObject更专注于业务逻辑,它们的“理念”何止相似,直接就是一致了。