Klesh.Cn

concentrating on knowing more...

拜托,请别再阉割WebForm了

  WebForm的组件式开发思想,去到极致就是GridView,为啥?自动化程度,高;智能程度,高;代码重用度,高;开发效率,高!所以微软大大小小的DEMO都喜欢用它,拖一拖,拉一拉,写几行代码,一个完整表格就出来啦……。不过,当我们回到现实应用中,基本上它就是一个摆设,偶尔会用它来作一些烟雾测试。所以,抛弃不合用的控件,对WebForm来说,不会有什么区别,不会导致WebForm发生本质的变化。当需要提高对页面代码控制粒度的时候,依靠基础的Repeater/Literal来输出纯净的页面代码也是理所当然的事了。

  当完成一件事能用更简单基于只能用更简单的方式去做的时候,应该是一件自然而然的事才对。

  可是,当ViewState被切下来的时候,我就很惊奇了,失去了ViewState的WebForm,Postback自然也没什么意义了,那么,原本隐藏在WebForm后面的HTTP机制不是又暴露在用户面前?那么,还能像WinForm那样轻松地定阅处理各种事件吗?那么,WebForm所倡导的RAD理念呢?(千万别ignore理念这个词)

  接下来甚至于内联的写法也被提出来了,怎么说呢,既然是内联写法了,那HTML的细节也暴露无遗了吧?那如此这般的WebForm相对于MVC又有什么优点了?组件化没了,RAD没了,可视化也没了,那究竟什么是WebForm?难道说一个aspx + aspx.cs就可以说它是WebForm了?那这WebForm的定义也太宽太广了吧!真是相当地期待 ScottGu 站出来说一究竟什么是WebForm以平息这种乱局。

  被阉割了的WebForm相比之MVC究竟还有什么优势?对Web开发新手而言,门槛似乎比MVC高了吧?不仅仅是需要了解HTML、HTTP等这些相对低层的东西,就是WebForm开发方面根本就不会有太多阉割版WebForm的资料可以参考。若是对页面代码的控制粒度有那么高的话,何不放开怀抱去拥抱质的变化?我想MVC的倡导者原先也极有可能是阉割的WebForm,到了一定程度,阉割版的WebForm也满足不了需求的时候,质的变化就出现了,就是不肯拥抱变化的态度,才让我们总是跟在人家后面跑!

  WebForm比之MVC即有如男人之比女人,男人做事粗放但办事效率高,女人做事细致而繁琐。硬是要他们同质化最终只会不伦不类。唉,难道潮流就是流行这些中性的东西,像什么超女超男的……

  有PHP背景的界面人员也太不具代表性了,要是和广大开发人员合作的界面人员都有PHP背景,那世界就和谐了,那我们就是社会主义最终形态了!而且我就假装地球上的界面人员都有PHP背景了吧,用MVC的话你连什么组件都不用跟他讲了,直接告诉他我给你什么数据,你给我POST什么数据不就OK了?

  看了也许您会觉得我在说WebForm不如MVC似的,所以我要强调一下:不是男人比不上女人,只是不要让男人去干女人干的事!

  Separation of Concerns - 关注点分离,说到这一点,我感觉国内.NET社区还是少一种开放的态度,昨天看《自由》兄的一篇贴子,评论里有位同志提了一句“MVC/IoC/ORM的理念相似”,后面竟然有人回说“不知道mvc和ioc/orm的相似性在哪里...”然后还讲了很多,很无奈啊!理念这个词完全被ignored,我想请大家一定要互相尊重,认真地阅读他人的文字。

posted on 2007-12-25 12:44 Klesh Wong 阅读(2676) 评论(87)  编辑 收藏 所属分类: NETOOPMVP

Feedback

#1楼  2007-12-25 12:50 kiler      

@Klesh Wong

那请问一下MVC怎么关注点分离,而WebForm又怎么不关注点分离了。
  回复  引用  查看    

#2楼  2007-12-25 12:50 阿标      

物尽其用啊   回复  引用  查看    

#3楼 [楼主] 2007-12-25 13:04 Klesh Wong      

@kiler
这里我倒没有想过要指责WebForm就没有关注点分离,而且不晓得在你心目中的WebForm又多宽多广。MS也没有明确定义,若是以官方大在小小的DEMO来看,你说在界面上放置界面无关的DataSource控件,在主要负责数据处理的cs文件中存在着对aspx界面控件的强引用,在控件中充斥着HTML代码又怎么能说是“关注点分离”!?
在MVC的View中除了呈现界面之外是不会有DataSource这类负责数据处理的东西了。那么你在View工作的时候就不用take care of the stupid datasource control, it's totally none of View's business.
  回复  引用  查看    

#4楼  2007-12-25 13:06 一抹微蓝      

webform和mvc是相辅相成的,永远不会对立,只是给你两种选择,根据具体情况去取舍,或者一个项目中两种混用也不是不可以。再说MVC框架不也是在现在的asp.net的基础上封装出来的嘛   回复  引用  查看    

#5楼  2007-12-25 13:11 SZW      

--引用--------------------------------------------------
一抹微蓝: webform和mvc是相辅相成的,永远不会对立,只是给你两种选择,根据具体情况去取舍,或者一个项目中两种混用也不是不可以。再说MVC框架不也是在现在的asp.net的基础上封装出来的嘛
--------------------------------------------------------

不知道为什么那么多人一看到webform和mvc的比较,就会以为是在谈论他们对立


--引用--------------------------------------------------
失去了ViewState的WebForm,Postback自然也没什么意义了
--------------------------------------------------------
楼主这句话这么说更好:
失去了Postback的WebForm,ViewState自然也没什么意义了

  回复  引用  查看    

#6楼  2007-12-25 13:14 SZW      

对Web开发新手而言,门槛似乎比MVC高了吧?
======================

不知道楼主这个观点怎么得来的……   回复  引用  查看    

#7楼 [楼主] 2007-12-25 13:14 Klesh Wong      

@SZW
Postback没有被砍的理由,但是ViewState会因为性能问题首先被砍掉。   回复  引用  查看    

#8楼  2007-12-25 13:15 SZW      

但是ViewState的存在难道不主要是为了Postback吗?   回复  引用  查看    

#9楼 [楼主] 2007-12-25 13:17 Klesh Wong      

@SZW
我后面说了啊,MVC最大的问题就是需要了解低层的东西,完全没有办法通过拖拉就完成开发的可能,但是走这条路条,还是可以找到很多资料学习的;然而阉割版的WebForm一样需要了解这些底层的东西,除此之外还不会有相关的资料可以参考。   回复  引用  查看    

#10楼  2007-12-25 13:19 阿不      

WebForm确实希望实践RAD的做法,但是我们要认识到,VS当真的就能做到对WEB页面的RAD吗?
所谓RAD,不仅仅是拖拉控件这么简单,所见即所得。但是目前很难看到VS中对WEB页面的设计所见取所得。
WebForm也不仅仅是RAD,我也同意没了ViewState会有很多不便,甚至WebForm也不那么WebForm了。但是我也相信,技术应用必须满足现实要求的需要。做一些修改,功能删减也是无可厚非的   回复  引用  查看    

#11楼  2007-12-25 13:21 SZW      

@Klesh Wong
MVC最大的问题就是需要了解低层的东西
=========================
我觉得对于单纯的开发本身的技术而言,MVC和WebForm是“同出一门”,毕竟很多机制都是相通的,对于底层的东西,MVC和WebForm都是需要去了解的,关键是他们面向的对象的开发应用方式上面有区别,此外就是两种框架的实现机制问题,这个上面各有所长就不要追求太多了。   回复  引用  查看    

#12楼  2007-12-25 13:23 SZW      

@Klesh Wong
  Separation of Concerns - 关注点分离,说到这一点,我感觉国内.NET社区还是少一种开放的态度,昨天看《自由》兄的一篇贴子,评论里有位同志提了一句“MVC/IoC/ORM的理念相似”,后面竟然有人回说“不知道mvc和ioc/orm的相似性在哪里...”然后还讲了很多,很无奈啊!理念这个词完全被ignored,我想请大家一定要互相尊重,认真地阅读他人的文字。

===========================

呵呵,可是似乎很多人都不能通过一个实体去了解后面的“理念”,而当你把“理念”说出来的时候,又有很多人拿着与他对立的“实体”去评判……如此循环下去   回复  引用  查看    

#13楼 [楼主] 2007-12-25 13:24 Klesh Wong      

@SZW
我说的是理念,不是讲什么机制,机制归根到底就是0和1,毫无趣味。我认为就是需要分清楚WebForm和MVC,该用哪个的时候就用哪个。
把WebForm整得跟MVC似的不论不类不是个解决的办法。   回复  引用  查看    

#14楼  2007-12-25 13:25 kiler      

@Klesh Wong

我眼里的webform就是单纯的html封装,控件就是显示界面用的,与什么业务数据都是无关的,MS的demo比较误导人不说也罢,我承认webcontrol设计中存在一些不合理的设计,对webcontrol的使用有点过,有点推崇界面操作业务的感觉,但是只能说微软给webcontrol设计了一些不适当的功能,webform本身其实是很纯粹的表现层。

---------------------------------------------------------
在界面上放置界面无关的DataSource控件,在主要负责数据处理的cs文件中存在着对aspx界面控件的强引用,在控件中充斥着HTML代码又怎么能说是“关注点分离”!?
----------------------------------------------------------

这些都是被滥用的结果,同样MVC一样的也存在被滥用的可能,我也看到过不少人在Controler甚至是model里面写上n多html输出语句。
  回复  引用  查看    

#15楼  2007-12-25 13:26 SZW      

@Klesh Wong
--引用--------------------------------------------------
Klesh Wong: @SZW
我说的是理念,不是讲什么机制,机制归根到底就是0和1,毫无趣味。我认为就是需要分清楚WebForm和MVC,该用哪个的时候就用哪个。
把WebForm整得跟MVC似的不论不类不是个解决的办法。
--------------------------------------------------------
我上面(12#)的话不是反对你的,只是一点感慨。

这个确实是的,也是我早就说过但是我现在不太愿意再提的,不然一切又要从头开始   回复  引用  查看    

#16楼  2007-12-25 13:28 SZW      

@kiler

这些都是被滥用的结果,同样MVC一样的也存在被滥用的可能,我也看到过不少人在Controler甚至是model里面写上n多html输出语句。
=============================

这些都是个人问题了,虽然“不鲜见”,但是那样的情况我们还是不要去讨论为好,那种只是MVC的架子,没有MVC的灵魂   回复  引用  查看    

#17楼 [楼主] 2007-12-25 13:29 Klesh Wong      

@kiler
非也,我倒不认为datasource就是滥用了,相反,datasource对webform来说是用对了,因为webform的理念就是RAD,而且cs文件对aspx上的控件存在强引用是绝对会发生的情况,不存在所谓滥用的说法。我一样不认为MS误导人,因为我认为webform就是一个rad框架。
我没有说封装就不好,但这就不是“关注点分离“了。
  回复  引用  查看    

#18楼  2007-12-25 13:30 kiler      

@Klesh Wong

你的观点我很赞成,确实不该阉割WebForm了,不该用WebForm不适合用WebForm就不要用,阉割写法确实不太好。我比较推荐WebForm做后台MVC做前台的方式。
  回复  引用  查看    

#19楼  2007-12-25 13:31 SZW      

@Klesh Wong
就好像好好一个中国人,他/她可以选择吃中餐,也可以选择吃西餐,并且他都能活得很健康。但是他吃西餐的时候需要多付出一点代价——准备西餐厨具和去学做西餐。   回复  引用  查看    

#20楼 [楼主] 2007-12-25 13:32 Klesh Wong      

@kiler
嗯,前后台的说法我也很赞成,采用哪种方式要看对页面代码控制粒度的要求。阉割WebForm和在Controller里拼装HTML代码都是错误的方式。   回复  引用  查看    

#21楼 [楼主] 2007-12-25 13:34 Klesh Wong      

@SZ--引用--------------------------------------------------
SZW: @Klesh Wong
就好像好好一个中国人,他/她可以选择吃中餐,也可以选择吃西餐,并且他都能活得很健康。但是他吃西餐的时候需要多付出一点代价——准备西餐厨具和去学做西餐。
--------------------------------------------------------
抱歉,不太明白你的意思。   回复  引用  查看    

#22楼  2007-12-25 13:34 SZW      

@kiler
我觉得至少这个效率上的想法是好的。
但是我想到一个问题:我觉得MVC和WebForm不是简单“前台”“后台”可以说得清楚的,比如MVC一个Action就从前台到后台了,这个时候,是让Controller去做呢还是让WebForm的codebehind去做呢?   回复  引用  查看    

#23楼  2007-12-25 13:36 SZW      

@Klesh Wong
--引用--------------------------------------------------
抱歉,不太明白你的意思。
--------------------------------------------------------
就是说让WebForm去实现一些不是出于他本来“传统”功能。当然我觉得还是用那个比喻好,这样简简单单说出来会有一些反面例子,有时候需要解释半天。

对于那个我补充一下:
就好像好好一个中国人,他/她可以选择吃中餐,也可以选择吃西餐,中餐是他本来就在吃的,并且他无论怎么吃都能活得很健康(包括混合吃)。但是他吃西餐的时候需要多付出一点代价——准备西餐厨具和去学做西餐。   回复  引用  查看    

#24楼 [楼主] 2007-12-25 13:44 Klesh Wong      

@SZW
呵,我就是认为把WebForm整到这份上就不是吃顿饭那么简单了,作为RAD理念的支撑全部被剪除了,恰似男人被去势,区别于彼此的特征没有了,它还是原来的WebForm吗?   回复  引用  查看    

#25楼  2007-12-25 13:48 SZW      

@Klesh Wong
我很低调的,说的太狠了会引发情绪大战,而冲淡基础的讨论主题了:)   回复  引用  查看    

#26楼  2007-12-25 13:49 kiler      

其实说白了就是:
对页面访问性能要求高,界面变化比较大的东东用MVC做,
对页面访问性能要求不是高,界面风格统一且变化不大,以及对界面操作要求比较高的东西用webform。   回复  引用  查看    

#27楼  2007-12-25 13:50 SZW      

@kiler
--引用--------------------------------------------------
kiler: 其实说白了就是:
对页面访问性能要求高,界面变化比较大的东东用MVC做,
对页面访问性能要求不是高,界面风格统一且变化不大,以及对界面操作要求比较高的东西用webform。
--------------------------------------------------------
补充一点:
对于过于依赖页面及其控件属性的,可以考虑使用WebForm   回复  引用  查看    

#28楼 [楼主] 2007-12-25 13:51 Klesh Wong      

--引用--------------------------------------------------
SZW: 但是ViewState的存在难道不主要是为了Postback吗?
--------------------------------------------------------
你说得没错,但为什么要人们要砍掉它们?Postback又没犯什么错,而且也带来了便利,没事砍它做啥啊?ViewState会被砍是因为它常常影响性能啊,ViewState是用来支撑Postback的,下面倒了,上面自然也要跟着倒啊。总而言之,我是到处看到喊着要砍ViewState的,没有看到有说要砍Postback的,但你砍了ViewState,Postback一定会跟着倒。   回复  引用  查看    

#29楼  2007-12-25 13:53 SZW      

这让我有种什么感觉?

当你走在路上,看到一份宣传单,当面写:xx商店 笔记本电脑5折!
然后你兴冲冲去了,到了那边,服务员跟你说,那个5折的性能不好,建议你买那个不打折的。   回复  引用  查看    

#30楼  2007-12-25 13:57 SZW      

@Klesh Wong
一个是需求(机制需求引发的技术需求),另外一个是需求对应的对策。

虽然需求没有错,但是对策很失败(即使目前看来似乎已经是比较好的方案了),但是我们仍然可以找同样需求下面的对策。

那么这个对策要如何更正呢?靠干脆放弃他,还是找一种替代方法?   回复  引用  查看    

#31楼 [楼主] 2007-12-25 13:58 Klesh Wong      

--引用--------------------------------------------------
SZW: 这让我有种什么感觉?

当你走在路上,看到一份宣传单,当面写:xx商店 笔记本电脑5折!
然后你兴冲冲去了,到了那边,服务员跟你说,那个5折的性能不好,建议你买那个不打折的。
--------------------------------------------------------
呵,这可不是我的企图啊,你要这么理解我也很无奈。
我确实是受不了WebForm被这么搞法,你要搞成这样,怎么不直接用MVC,要是真牛啊,就秉着RAD的理念,找出一条新路来。那同为园中人的我也倍儿有面子。

我来抒发一下情感,看看能不能找到知音而已,你买不买帐我可没有什么好处费收哦。   回复  引用  查看    

#32楼  2007-12-25 13:58 SZW      

@Klesh Wong
我没有针对你说,是针对你说的“阉割”WebForm
只是帮你做点补充   回复  引用  查看    

#33楼  2007-12-25 14:02 SZW      

@Klesh Wong
--引用--------------------------------------------------
我确实是受不了WebForm被这么搞法,你要搞成这样,怎么不直接用MVC,要是真牛啊,就秉着RAD的理念,找出一条新路来。那同为园中人的我也倍儿有面子。
--------------------------------------------------------

我曾经有一点点那种想法,不过没你这么强烈:)   回复  引用  查看    

#34楼 [楼主] 2007-12-25 14:05 Klesh Wong      

@SZW
原来如此,哈哈,那这一点咱们还是想到一块去了。

唉,我这人RP有限,也没什么WH,说话直白土了点,不要见怪哈。   回复  引用  查看    

#35楼  2007-12-25 14:11 xiao_p      

:-) 这种讨论不错,能看到点真正的东西。

其实,webform也好,mvc也好,都是工具,工具就肯定有工具的适用范围,非要拿锤子砍树,拿斧子砸钉子,这就怪不得别人了。   回复  引用  查看    

#36楼  2007-12-25 14:11 SZW      

@Klesh Wong
如果不是,我就不会那么专注去考虑MVC了:)
PS:目前我也只能用“考虑”两个字   回复  引用  查看    

#37楼  2007-12-25 14:23 BoyLee      

路过   回复  引用  查看    

#38楼  2007-12-25 14:24 Linjianyu [未注册用户]

能不能把“阉割”换成“精简”,这样好听。
存在就是理由。
是骡子是马拉出来遛遛就知道了。
  回复  引用    

#39楼  2007-12-25 14:27 Jeffrey Zhao      

如果说没有ViewState的话PostBack就无效了说明你还不了解WebForms。
说没有ViewState就没有组件化优势了还是说明你不了解WebForms。
还有说ViewState存在是为了“更好”的PostBack,而不是纯粹的PostBack。
其他就不多说了,很多话反复说实在没意思。   回复  引用  查看    

#40楼 [楼主] 2007-12-25 14:33 Klesh Wong      

@Jeffrey Zhao
好,你了解。我确实不敢自认就很了解,那么,没有了ViewState的Postback,控件的状态如何保存?控件没有了保存自己状态的能力,谈何“组件化”?与其指责我的不了解,不如直接指教我的无知,如此方能让人信服,直接就说我不了解也太CCTV了。
  回复  引用  查看    

#41楼  2007-12-25 14:37 Jeffrey Zhao      

@Klesh Wong
不需要保存控件状态。比如一个文本框,需要控件状态做什么?你难道真的需要TextChange事件?Text属性可不需要ViewState。
一个按钮触发Click事件,需要ViewStaet吗?不需要。
你刚才也说了:“我是到处看到喊着要砍ViewState的,没有看到有说要砍Postback的”你怎么就没有想过原因,还在坚持没有了ViewState就没有了PostBack?因为PostBack没有了ViewState照样存在,可行,合适,方便。就是这么简单。   回复  引用  查看    

#42楼  2007-12-25 14:44 王亮的学习.NET之路      

正是程序员的懒才能促进开发工具的进步   回复  引用  查看    

#43楼 [楼主] 2007-12-25 14:54 Klesh Wong      

@Jeffrey Zhao
嗯,很好,现实有你说的那么简单吗?一个文框一个按钮能解决所有问题吗?很常见的比如说一个表单,需要在服务器端进行校验,校验失败的时候表单的状态要保存,上面有个分类的DropDownList,它的datasource要绑定到了分类表,你没有ViewState是不是每次要进行绑定?你每次绑定后SelectedIndex是不是都被重置了?没有了状态管理,这组件化还叫什么组件化?没有了ViewState的Postback简直就是鸡肋!   回复  引用  查看    

#44楼  2007-12-25 15:04 Jeffrey Zhao      

@Klesh Wong
你想想MVC是怎么做的,想想WebForms可以怎么做的吧。其他的我实在不想多说了。我说了再多,只要没有用实例证明给你看,你还是想不了该怎么做(可能给出实例了你又有其他理由了,呵呵)。
我现在说那么多,也是因为不想因为你这些话让别人误解ViewState,PostBack,WebForms这些东西。只是我想说,我用WebForms很多年,享受组件化和PostBack带来的便利许许多多,然后没有受到禁用ViewState的影响,如果不信这一点,又不愿去尝试的,我想也就随意吧。
  回复  引用  查看    

#45楼  2007-12-25 15:05 SZW      

@Klesh Wong
这个我要说你一句,ViewState的存在我刚才也只说了"主要"是为了PostBack,但是不是为了PostBack这个操作本身,而是Back回去之后的一系列操作,老赵说的不需要更多的是前台操作上,而楼主说的PostBack更多指的是一系列PostBack的相关行为。这可能是你们的一些想法上都没说清楚。   回复  引用  查看    

#46楼  2007-12-25 15:07 SZW      

@Jeffrey Zhao
便利和效率,确实是个问题(哪怕不是在WebForm和MVC上面,比如linq to sql)   回复  引用  查看    

#47楼  2007-12-25 15:11 lovecherry      

说实话,我现在看了MVC就烦,一个在2000年被认为非常简单的概念为什么到2008年反而变成了大家吹捧的东西
  回复  引用  查看    

#48楼 [楼主] 2007-12-25 15:14 Klesh Wong      

@Jeffrey Zhao
你还是想当然了吧,我可没有说这种问题解决不了,你能用什么办法解决我不用想都知道,你前前后后提的种种做法,我用了N年,根本无须尝试,反驳你的理由,来来去去就一个,问题是可以解决,但是解决的方法一定与WebForm的理念背道而驰了,所以你解决来解决去根本就不能为WebForm说什么话,根本就是在否定WebForm的RAD理念。

MVC又不提倡RAD,他怎么做怎么行了,没有束缚。

就好像男人哭会被笑,女人哭会被人呵护的道理一样。

不肯尝试的似乎不是我吧。   回复  引用  查看    

#49楼  2007-12-25 15:17 SZW      

@lovecherry
很多人是跟着“吹捧”没错,不过所谓“空穴来风”,还是有一定基础的,并且我觉得这对于WebForm是一件好事——
至少说明WebForm的研究和应用更加深入了,很多优缺点都被总结出来(我想第一次用WebForm就会自己想到不去用ViewState的人很少吧),然后才会有一些补充和其他方案被提出来。
等MVC慢慢成熟的过程中,肯定也会有其他的一些弥补MVC本身“先天不足”的架构被提出来。   回复  引用  查看    

#50楼  2007-12-25 15:18 木野狐(Neil Chen)      

空谈误国,建议同志们还是 mvc/webform 择其善者而用之吧,因时、因地选择不同的技术完成目标。
  回复  引用  查看    

#51楼  2007-12-25 15:28 Jeffrey Zhao      

@Klesh Wong
认为WebForms只能用来RAD,如果不用来RAD就没有其他帮助了,这也是错误的。还是这句话,送你10样东西,没必要说你不用其中6样就“违背了别人的心意”了,有了剩下的4件照样好用。我最近也一直在尝试MVC框架——更多的是RoR,愈发觉得因为有MVC而去说WebForms如何如何是不行的,至少就目前来说看到的理由都实在站不住脚。因为我在用WebForms时依旧可以体现MVC思想,什么V/C分离都不在话下。但是我还能享受WebForms中组件化带来的便利。
你也说了MVC可以怎么就怎么做,没有束缚。呵呵,我之前还说过一句话:一个东西用着简单,用好难,那么别人就会鄙视他。如果一个东西给的支持少,用着是不是简单不知道,是不是容易用好也不知道,但是就有人会觉得它牛——记得也是在你这里说的。
  回复  引用  查看    

#52楼  2007-12-25 15:30 Jeffrey Zhao      

--引用--------------------------------------------------
SZW: @lovecherry
很多人是跟着“吹捧”没错,不过所谓“空穴来风”,还是有一定基础的,并且我觉得这对于WebForm是一件好事——
至少说明WebForm的研究和应用更加深入了,很多优缺点都被总结出来(我想第一次用WebForm就会自己想到不去用ViewState的人很少吧),然后才会有一些补充和其他方案被提出来。
等MVC慢慢成熟的过程中,肯定也会有其他的一些弥补MVC本身“先天不足”的架构被提出来。
--------------------------------------------------------
这才是正确的对待技术的方式。   回复  引用  查看    

#53楼  2007-12-25 15:31 SZW      

@Jeffrey Zhao
--引用--------------------------------------------------
这才是正确的对待技术的方式。
--------------------------------------------------------
我一直都是这么想的好不好…………   回复  引用  查看    

#54楼  2007-12-25 15:35 Jeffrey Zhao      

@SZW
呵呵,没说你,我觉得和你讨论是很有帮助的。   回复  引用  查看    

#55楼 [楼主] 2007-12-25 15:46 Klesh Wong      

@Jeffrey Zhao
呵,试一下从界面人员,和控制人员不同的角度去看吧
对界面人员来说,传过来的数据,喜欢显示也行,不喜欢显示也可以。
对控制人员来说,我负责把数据处理好传给视图就行,你喜欢输出HTML也行,喜欢输出XML也行。
这就是所谓的“关注点分离”,相互之间不需要关心对方的内部细节,单独的变动不会导致对方也要做相应的变动。   回复  引用  查看    

#56楼  2007-12-25 15:59 Jeffrey Zhao      

--引用--------------------------------------------------
Klesh Wong: @Jeffrey Zhao
呵,试一下从界面人员,和控制人员不同的角度去看吧
对界面人员来说,传过来的数据,喜欢显示也行,不喜欢显示也可以。
对控制人员来说,我负责把数据处理好传给视图就行,你喜欢输出HTML也行,喜欢输出XML也行。
这就是所谓的“关注点分离”,相互之间不需要关心对方的内部细节,单独的变动不会导致对方也要做相应的变动。
--------------------------------------------------------
我不知道你是怎么用的,至少我从来遇到过这方面的问题。你看ASP.NET MVC框架是怎么实现View的就知道了——完全还是WebForms的方式,类似的方式早就算使用WebForms也是这样用的,WebForms只是没有像MVC那样的限制而以。
我在上一个公司,网站经常需要在显示上进行改变,而这个改变是由页面控制的团队做的,我们只是把所有的aspx/ascx在source control中为他们开启了权限就可以了,工作一切正常。我们很方面,也没有损失任何东西。   回复  引用  查看    

#57楼  2007-12-25 16:04 SZW      

@Jeffrey Zhao
你说到了一个我上篇文章里面也提到的问题,MVC(CTP)的V层确实和C还有点“藕断丝连”,就看他以后怎么处理这个问题了。当然,“WebForms的方式”也不是WebForm的专利,在ASP.NET基础上,有些东西只能那么做(尤其是在前期还不确定很多方向的时候),这不能说明什么,甚至可以说MVC可以对WebForm的一些东西吸纳进来。

至少目前的V层还缺少纯粹“模板”的味道。
纠正一下,说V层范围太大了,我就是说他.aspx的一些输出和处理方式上。   回复  引用  查看    

#58楼  2007-12-25 16:18 Jeffrey Zhao      

--引用--------------------------------------------------
SZW: @Jeffrey Zhao
你说到了一个我上篇文章里面也提到的问题,MVC(CTP)的V层确实和C还有点“藕断丝连”,就看他以后怎么处理这个问题了。当然,“WebForms的方式”也不是WebForm的专利,在ASP.NET基础上,有些东西只能那么做(尤其是在前期还不确定很多方向的时候),这不能说明什么,甚至可以说MVC可以对WebForm的一些东西吸纳进来。

至少目前的V层还缺少纯粹“模板”的味道。
纠正一下,说V层范围太大了,我就是说他.aspx的一些输出和处理方式上。
--------------------------------------------------------
目前ASP.NET MVC所用的V,应该就是WebForms里的专利,MVC是“复用”了之前的成果了,这样MVC框架就不用重新开发一套引擎了。如果没有WebForms的这套成果,我想ASP.NET MVC的V未必会是现在这样,不能说ASP.NET基础上,有些东西只能这么做。Monorails不就用了别的模板语言吗?
这样做有好处也有坏处。
好处是熟悉Webforms的人不用重新学习模板语言,并且这套V在一定程度上还能够利用不少现有成果,而且使用久经考验的东西避免了重新开发一套所带来的风险。
坏处是,的确缺了点模板的味道。   回复  引用  查看    

#59楼 [楼主] 2007-12-25 16:19 Klesh Wong      

@Jeffrey Zhao
呵,那说明你们公司整体素质高嘛。很幸福
我有个朋友在一家公司做XHTML+CSS和W3C方面的工作,他就整天抱怨公司的.NET很难搞——直到后来,.NET的Team都被解散了,而Java/PHP团队就存活下来了。

另外提一下ID生成问题,我是很期待君上的高见了,不过先声明不要说通过class/tagName来代替ID,语义上这是不可接受的,如果我是站在客户端编程人员的角度或者HTML编写人员,我会认为是你导致了我的工作变得不必要地复杂起来。是服务端编程人员不负责任的态度导致了客户端编程工作增加了不必要的复杂性。

做服务端的当然是爽了,但是客户端的就惨了

换过来说,如果说哪一天某一个页面某一个控件上的元素不要了,你知道WebForm机理的人,自然就知道要在aspx/aspx.cs中把控件都删掉、或者只是在aspx把它隐藏。但对于不懂的人呢?他会不会直觉地就直接把它删,是不是就会出错了,是不是相互间就影响了?哪本《敏捷》的书说过来着,依赖于约定的编程不是好的实践。
补充一下,我这里说的依赖于约定和那种“基于约定”编程是不同的,这里的约定指人员之间的约定。   回复  引用  查看    

#60楼  2007-12-25 16:35 SZW      

@Jeffrey Zhao
是的,我之前也说过了完全可以在WebForm上面利用WebForm的引擎开再发出一个MVC来然后编译到System.Web.Mvc里面去。
是我打错了,我刚才说的ASP.NET是指WebForm。(如果我这种类似的假设成立的话,至少我是这么“助解”的,不管他具体用了什么方法,效果是一样的)
至于你说的Monorails用了别的模板语言,CTP就这么做,我觉得太冒险了
,使用这样的方式也是情理之中。(说句坏话,那个MVCToolkit实在有待改进,感觉写的时候都没用脑子,我现在都已经懒得去“挖掘”了)
  回复  引用  查看    

#61楼  2007-12-25 16:37 Jeffrey Zhao      

@Klesh Wong
不是整体素质高,而是我一开始写了份简单的示例,该怎么写该怎么做,然后我不时检查一下。至于不负责任的开发人员,我想不用讨论这个因素了。滥用乱用的话,WebForms和MVC又有什么区别,这点你也提到了。
关于ID的问题,我前几天已经写好了:
http://www.cnblogs.com/JeffreyZhao/archive/2007/12/23/experience-for-asp-dot-net-and-webforms-3.html   回复  引用  查看    

#62楼  2007-12-25 16:41 Jeffrey Zhao      

--引用--------------------------------------------------
SZW: @Jeffrey Zhao
是的,我之前也说过了完全可以在WebForm上面利用WebForm的引擎开再发出一个MVC来然后编译到System.Web.Mvc里面去。
是我打错了,我刚才说的ASP.NET是指WebForm。(如果我这种类似的假设成立的话,至少我是这么“助解”的,不管他具体用了什么方法,效果是一样的)
至于你说的Monorails用了别的模板语言,CTP就这么做,我觉得太冒险了
,使用这样的方式也是情理之中。(说句坏话,那个MVCToolkit实在有待改进,感觉写的时候都没用脑子,我现在都已经懒得去“挖掘”了)
--------------------------------------------------------
实在没必要再WebForms引擎里实现一套MVC来。我说的WebForms的MVC是体现了MVC的理念,其本质还是WebForms。还有我觉得如果要实现新的模板,就应该从CTP开始做,可以让社区帮忙发现Bug和给出建议和意见,呵呵。   回复  引用  查看    

#63楼  2007-12-25 16:47 SZW      

@Jeffrey Zhao
说到ID,老赵我要请教你一个问题了(不想再引起争论了,只听你的看法,我的自己的想法就先不说了):
如果一个页面生成了动态(不确定)控件的ID,你又在xsl中建立了模板(模板中有控件位置,但没有ID),你怎么去处理,使这些xsl中的控件可控制?
换句话说怎么把这些ID变化的机制引入到xsl当中?并且保证他们输出的时候,和在.aspx中控件是一致的,并且是可控的

@Klesh Wong
不管WebForm的ClientID是不是多此一举,至少目前也只能这样了,不要在这个框架内期待他有什么改进了,面对现实就行了,至少还能用总不是坏事
  回复  引用  查看    

#64楼  2007-12-25 16:51 SZW      

@Jeffrey Zhao
--引用--------------------------------------------------
还有我觉得如果要实现新的模板,就应该从CTP开始做,可以让社区帮忙发现Bug和给出建议和意见,呵呵。
--------------------------------------------------------
这个工作我一个多星期前已经在做了,可是似乎一谈MVC(或者说帮助MVC发展)就会抢掉某些人饭碗一样,这又不是java与.net之争。关于Bug之类的问题我还是默默自己研究一段时间再说吧,“如何改进”的讨论,演变成“取舍”的争论,最没意思。

补充:
我开始有点理解错你的意思了,不过上面这些确实是我的想法。

关于你说的那个CTP就是用模板,我觉得不符合.NET3.5“亲民”的路线(至少我感觉这股味很重)   回复  引用  查看    

#65楼  2007-12-25 16:58 Jeffrey Zhao      

--引用--------------------------------------------------
SZW: @Jeffrey Zhao
说到ID,老赵我要请教你一个问题了(不想再引起争论了,只听你的看法,我的自己的想法就先不说了):
如果一个页面生成了动态(不确定)控件的ID,你又在xsl中建立了模板(模板中有控件位置,但没有ID),你怎么去处理,使这些xsl中的控件可控制?
换句话说怎么把这些ID变化的机制引入到xsl当中?并且保证他们输出的时候,和在.aspx中控件是一致的,并且是可控的
--------------------------------------------------------
没有怎么听懂,不过既然你这样问估计是很难做到的。
那么这样的情况下,就按照ASP.NET MVC里模板的写法吧。
忽然意识到一个问题(和MVC无关),ASP.NET MVC的View里,如果使用服务器控件,应该还是会出现复杂的ID吧?不如在aspx里试试看,或者在aspx里使用MasterPage试试看?   回复  引用  查看    

#66楼  2007-12-25 16:59 SZW      

@Jeffrey Zhao
不用试了,会生成
所以我说MVC兼容几乎所有的WebForm功能,PostBack也行   回复  引用  查看    

#67楼  2007-12-25 17:00 Jeffrey Zhao      

@SZW
微软的东西一向亲民性很重的,呵呵。
但是mvc是新东西,我倒觉得重新开始一套模版机制倒还没什么,现在如果以后忽然变了反而会出事,我估计MVC的模板写法不太会变了,会变得应该是MVCTookit。   回复  引用  查看    

#68楼  2007-12-25 17:03 Jeffrey Zhao      

@SZW
那么如果微软能够让MVC和WebForms轻松结合的话,我倒准备在项目中同时使用MVC和WebForms了,为了同时得到某些情况下直观的MVC和WebForms里的组件特性了。现在的状况是WebForms体现MVC理念容易,在MVC里利用WebForms的优势困难。   回复  引用  查看    

#69楼  2007-12-25 17:11 SZW      

@Jeffrey Zhao
是的,本来就能轻松结合的,上次给你看的scott的例子里面也有了,绑定什么完全可以codebehind完成。

如果出于效率考虑是蛮好的,但是违反了MVC的初衷,那样还不如用你原来的办法,在WebForm里面“改造”一下了。   回复  引用  查看    

#70楼  2007-12-25 17:14 SZW      

@Jeffrey Zhao
在MVC里利用WebForms的优势困难
==============
倒也不是太困难,你可以完全不要理会Model层(用你自己的方法建Model),用了ASP.NET MVC的话,C层你是避免不了的(你非要绕过就没意思了),问题就是可能会增加你在C层的一些负担,而这些原本直接访问.aspx或者URL重写就能轻松搞定的。   回复  引用  查看    

#71楼  2007-12-25 17:20 SZW      

@Jeffrey Zhao
另外我好好想了想MVC使用自己一套模板语言的事。感觉似乎很有前途,反正测试什么不成问题的。但执行起来,最有问题的倒是编辑器上面,MS是否愿意专门提供一套不和WebForm公用的,独立的开发体验出来(不然可能就乱套了,比如默认的工具栏现在对MVC来说几乎多余,是否能有MVC专用的工具栏,还有C/M层那些代码段的管理,是个大问题)。WebForm基本上就依赖在VS上面了,而到时候的MVC又该如何呢?   回复  引用  查看    

#72楼  2007-12-25 17:31 Jeffrey Zhao      

@SZW
倒也不会,还是要看你在那个当作V的code behind里做哪些事情了。aspx里有个repeater也不会造成什么麻烦。   回复  引用  查看    

#73楼  2007-12-25 17:33 Jeffrey Zhao      

--引用--------------------------------------------------
SZW: @Jeffrey Zhao
在MVC里利用WebForms的优势困难
==============
倒也不是太困难,你可以完全不要理会Model层(用你自己的方法建Model),用了ASP.NET MVC的话,C层你是避免不了的(你非要绕过就没意思了),问题就是可能会增加你在C层的一些负担,而这些原本直接访问.aspx或者URL重写就能轻松搞定的。
--------------------------------------------------------
我不知道,不如试试看吧。
不过有一点很那个,就是这完全和“MVC框架”本身无关,而是ASP.NET MVC的特殊情况而得到的东西——因为还是利用了WebForms。   回复  引用  查看    

#74楼  2007-12-25 17:48 SZW      

&