Asp.net Mvc开发体会点滴 一

大家中秋快乐,^^,近几日较忙抽点时间把写了快一个星期的日志发出来下,下面有一些是实验验证,有一些的直观感觉,所以难免有错,希望众兄弟指正

以下是这些日子来使用Asp.net Mvc的部分心得与体会

何时使用Helper

其实使用Helper性能不是太高,能免即免,不过可以在以下场合使用

1.存在Url的地方

比如超级连接,Form的Action,图片的Src.因为开发者的UrlRouting可能变化,如果写死,改动成本较大

2.有表单,并且是修改信息的时候

因为<%=ViewData["字段"]%>本身切换显示也很费时,所以不如直接用Html来绑定输出

3.表单中的动太信息DropDownList

因为HtmlHelper已经提供了很好的方法,所以在填充它时还是尽量使用HtmlHelper

对于一般插入型的表单,直接HTML我觉得就比较好了

使用Helper时要注意的问题

1.尽量不要使用RenderAction

RenderAction相当于再执行了一个Action

它的效率选没有Html.RenderPartial好,且无法使用事务,在数据库操作时很是不爽

不过它的使用也算简单,在不要求页面效率时可以使用

2.关于Microsoft.Web.Mvc

在这个程序集中的类都是预计发布的测试版,性能尚不稳定,而且更改的可能性要高很多,所以最好就是尝一下鲜,不推荐使用

提高程序性能

其实这是一个通性问题,在任何的Web架构中都是一样的.

1.尽量使用事务

特别是在写入数据库时,TransactionScope可以有效减少数据库的连接次数

2.各数据库操作共用Connection

在我的程序中,使用了Ado.netEntity,通过Linq to Entities来进行查询,而使用我自定义的数据库类来CUD,经测试二者使用同一个Connection大大的提高了连接数据库的性能.

这个也可以用在Linq to Sql.

架构与模式

其实我觉得Models的含义并不止于实体,其实也有数据的读写功能

将数据的读写封装成类,在适当的Controller中调用其实是一个很好的方法,相信很多朋友已经这么做了.

而封装数据操作我觉得使用Mediator模式比较合适,这样可以将各实体关连,也做到了很好 的分类.

 

这里只是取了部分我想到的问题,如果您同意或者反对,欢迎讨论

posted @ 2008-09-15 21:17 重典 阅读(16752) 评论(32) 编辑 收藏

 回复 引用 查看   
#1楼2008-09-15 22:38 | Gray Zhang      
看来ASP.NET MVC结束了对“服务器端控件是否消耗资源”的争论,开始了“HtmlHelper是否消耗资源”的争论……
 回复 引用 查看   
#2楼[楼主]2008-09-15 22:43 | 重典      
@Gray Zhang
呵呵,其实感觉也没什么好争的,个人有个人的看法吧

 回复 引用 查看   
#3楼2008-09-16 08:26 | 紫色永恒      
Models也可以分几个程序集来做
Helper嘛,在apply.51mvc.com中我是大量实验性应用了。实验结果表明,其开发速度不比纯html快 专为不熟悉(x)html的人员设计。当然dropdownlist除外。

 回复 引用 查看   
#4楼2008-09-16 08:41 | Q.Lee.lulu      
@紫色永恒

f小朋友起得真早啊....还神不知鬼不觉的广告了下...

对于一般的HtmlHellper吧,我觉得是没什么性能上的问题的。对于Url.Action()这类的生成URL的Hellper吧,因为要出查RouteTabel,可能会消耗点性能,当然这得看你的Route的复杂程度....



2.有表单,并且是修改信息的时候

因为<%=ViewData["字段"]%>本身切换显示也很费时,所以不如直接用Html来绑定输出

这个没怎么看明白,囧rz.......

 回复 引用 查看   
#5楼2008-09-16 09:28 | Gray Zhang      
有人和我说,HtmlHelper一用,纯粹的美工就看不懂网页了怎么办
 回复 引用 查看   
#6楼2008-09-16 09:32 | tianyamoon      
学习
 回复 引用 查看   
#7楼[楼主]2008-09-16 10:12 | 重典      
@Gray Zhang
这个就是美工的问题了,我合作的美工都是看最后生成的页来做CSS的而不是看ASPX,这样就不存在不明白了,
一对比就大概知道什么意思了

 回复 引用 查看   
#8楼[楼主]2008-09-16 10:14 | 重典      
@Q.Lee.lulu
就是其实
a<%=x%>b<%=t%>c这样输出
和字符串拼接
<%="a"+x+"b"+t%>实际上是差不多的

 回复 引用 查看   
#9楼[楼主]2008-09-16 10:14 | 重典      
@紫色永恒
是这样的,正中此文要点

 回复 引用 查看   
#10楼[楼主]2008-09-16 10:16 | 重典      
@紫色永恒
@Q.Lee.lulu
这个不算广告,算宣传,呵呵

 回复 引用 查看   
#11楼2008-09-16 10:26 | 紫色永恒      
其实控件的一个比较严重的问题就是和UI人员之间的配合
而helper的引入一样存在这个问题
这里有点矛盾 要我看如果用helper 还是在页面完工以后由后台人员来改写而不要强迫UI人员去习惯helper
但这又要求后台人员了解html,没办法 长期以来的矛盾了

 回复 引用 查看   
#12楼[楼主]2008-09-16 10:32 | 重典      
@紫色永恒
是啊,不过正如刚才我回复的那个
"这个就是美工的问题了,我合作的美工都是看最后生成的页来做CSS的而不是看ASPX,这样就不存在不明白了,
一对比就大概知道什么意思了"
而且他们只有改Class的权利没有改ID的权利
反之我就没有改Class的权利

一直以来配合很好

 回复 引用 查看   
#13楼2008-09-16 10:41 | 哦,奇怪      
柳公权的字就是漂亮~~
高中学了两年他的字:)

 回复 引用 查看   
#14楼[楼主]2008-09-16 10:43 | 重典      
@哦,奇怪
是啊是啊,呵呵

 回复 引用 查看   
#15楼2008-09-16 12:33 | 紫色永恒      
@重典
改成乱世非典就更贴切了!

 回复 引用 查看   
#16楼2008-09-16 12:34 | 紫色永恒      
--引用--------------------------------------------------
重典: @紫色永恒
是啊,不过正如刚才我回复的那个
&quot;这个就是美工的问题了,我合作的美工都是看最后生成的页来做CSS的而不是看ASPX,这样就不存在不明白了,
一对比就大概知道什么意思了&quot;
而且他们只有改Class的权利没有改ID的权利
反之我就没有改Class的权利

一直以来配合很好
--------------------------------------------------------
的确是个好方法

 回复 引用 查看   
#17楼2008-09-16 12:36 | 紫色永恒      
--引用--------------------------------------------------
重典: @Q.Lee.lulu
就是其实
a&lt;%=x%&gt;b&lt;%=t%&gt;c这样输出
和字符串拼接
&lt;%=&quot;a&quot;+x+&quot;b&quot;+t%&gt;实际上是差不多的
--------------------------------------------------------
如果你搞过asp就晓得 第一种方式性能没有第二种方式好

 回复 引用 查看   
#18楼[楼主]2008-09-16 12:44 | 重典      
@紫色永恒
是的.我也是老Asper了

 回复 引用 查看   
#19楼2008-09-16 13:11 | Leven      
--引用--------------------------------------------------
Q.Lee.lulu: @紫色永恒
<br>
f小朋友起得真早啊....还神不知鬼不觉的广告了下...
<br>
对于一般的HtmlHellper吧,我觉得是没什么性能上的问题的。对于Url.Action()这类的生成URL的Hellper吧,因为要出查RouteTabel,可能会消耗点性能,当然这得看你的Route的复杂程度....
<br>
<br>
2.有表单,并且是修改信息的时候
<br>
因为&lt;%=ViewData[&quot;字段&quot;]%&gt;本身切换显示也很费时,所以不如直接用Html来绑定输出
<br>
这个没怎么看明白,囧rz.......
--------------------------------------------------------
来晚了...先顶.
关于Url.Action的效率问题.我认为一般情况下并不足为虑,而且系统也提供了优化的方法,具体好像以前说过了.
有表单的时候.如果用HTML类输出的话美工要想改html估计有点困难了.看情况吧.

 回复 引用 查看   
#20楼2008-09-16 21:02 | <∩扫地僧∩>      
学完了,典典的文章是一定要顶的!
 回复 引用 查看   
#21楼2008-09-16 22:51 | 杨义金      
大家谁知道正式版什么时候出啊?
现在把MVC应用到项目里,感觉有点心惊肉跳的。

 回复 引用 查看   
#22楼[楼主]2008-09-16 22:59 | 重典      
@&lt;∩扫地僧∩&gt;
和尚来看了,呵呵

 回复 引用 查看   
#23楼[楼主]2008-09-16 22:59 | 重典      
@Leven

 回复 引用 查看   
#24楼[楼主]2008-09-16 22:59 | 重典      
@杨义金
Beta都不确定...

 回复 引用 查看   
#25楼2008-09-26 17:25 | 勇敢的兽      
我来啦! 哈哈

我有个问题问下哈,.cd文件是怎么生成的??

 回复 引用 查看   
#26楼2008-09-26 17:27 | 勇敢的兽      
啊,原来叫做类“关系图”,找到啦,哈哈

CHSNS# 发布没??

 回复 引用 查看   
#27楼2008-09-29 17:22 | 逸之羊      
没有找到二啊
 回复 引用 查看   
#28楼2008-11-08 17:51 | thyking Xiao      
现在正在学习您的视频教程,非常感谢您!

请问您个问题,我现在的版本是beta版,我建立的MVC项目要在IIS中浏览,却浏览不了。在VS2008中直接调试可以。IIS6.0中已加了.mvc的映射

 回复 引用 查看   
#29楼[楼主]2008-11-08 22:32 | 重典      
1.您的uRLRouting规则是否是.mvc扩展名的,如果不是改为类似
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}.mvc", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
2.您添加的.mvc扩展名的isapi是否 检查文件是否存在 项为选中,如果选中,请取消

 回复 引用 查看   
#30楼2010-04-25 16:02 | collum      
在使用RenderAction的时候,如果在主页面中的action中做完了处理,使用return view() 返回页面的时候,会触发RenderAction的对应的post 的action,不知道这个算不算是一个bug?
 回复 引用 查看   
#31楼[楼主]2010-04-25 20:37 | 重典      
@collum
其实也不算,可以使用OnlyChildFilter来标记一下只由Helper来引用,不过在ASP.NET MVC的实施过程中最好不要使用Html.Action或Html.RenderAction

 回复 引用 查看   
#32楼2011-10-26 00:39 | 魏生斌      
看提高性能的第二点: 查询使用实体,而增改删 使用自己定义的类,能否共享下呢,或者介绍一下也行,想借鉴学习一下。。。。