『 天道酬勤 』 李天平的博客


君子之行,静以修身,俭以养德。非淡泊无以明志,非宁静无以致远。
posts - 127, comments - 2848, trackbacks - 83, articles - 18
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

ASP.NET MVC是微软官方提供的开源MVC框架. 在经过了漫长的preview和2个RC版本后, 终于发布了1.0正式版本。自从微软发布ASP.NET MVC框架1.0正式版,对于MVC的讨论就不绝于耳。
今日闲来无事做一个基于三层架构的MVC模式应用的完整示例项目,开放源码。
该项目涉及如下几项要点应用:
 1) 整个解决方案基于标准的三层结构。
 2) 表示层采用MVC模式。
 3) 数据的增、删、改、查操作示例。
 4) 基于MVC的列表数据显示及分页处理。
 5) Linq的应用等。


搭建MVC开发环境:

.NET Framework 3.5 SP1  下载地址:
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=ab99342f-5d1a-413d-8319

-81da479ab0d7

VS.NET 2008 SP1  下载地址:
http://www.microsoft.com/downloads/details.aspx?familyid=27673C47-B3B5-4C67-BD99-

84E525B5CE61&displaylang=zh-cn

ASP.NET MVC框架1.0正式版下载地址:
http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-

35e00103cb4b&displaylang=en

微软MVC官方网站:http://www.asp.net/mvc/

 

通过对MVC的学习,我们可以看到MVC有如下特点:
1) 业务处理与显示分离:ASPX页面与CS代码彻底分离。更好的复用和维护。
2) 服务器端的表单控件不再被提倡使用,取而代之使用传统的input,或直接让Html.TextBox生成控件标签。
3) 没有了事件驱动模型。在ASP.NET MVC中,当某个按钮被点击,你不要再习惯性想到应该在相应的aspx.cs中有

个Click处理方法,你应该想到的是该有某个Controller中有个Action来处理这个事件。
4) 没有了数据绑定。如果你习惯了GridView的数据绑定,在ASP.NET MVC中则需要改变思路,你自己动手解决。
5) 增加了地址重写。MVC的Routing组件让我们可以很好的进行URL路由处理。
6) 总体来看,可以理解MVC是基于Web Form的一种编程方式模型扩展,是一种表示层的编程模型方案。

 

基于三层架构的MVC模式应用的完整示例项目源码下载

 

 

Feedback

#1楼  回复 引用 查看   

2009-06-07 14:32 by 温景良(Jason)      
up

#2楼  回复 引用 查看   

2009-06-07 14:33 by guozili@163.com      
觉得传统的三层架构和MVC模式耦合在一起有点过度设计,
MVC推荐用model层处理业务和数据,
并调用Repository模式实现的数据层,
要么webform + 三层架构,
要么mvc + service + repository

#3楼[楼主]  回复 引用 查看   

2009-06-07 14:38 by 李天平      
@guozili@163.com
你说的不无道理。这里只是想通过二者的结合,希望在不过大改动先前三层项目架构的情况下,如何充分利用二者的一些特点加入一些新的东西。顺着自取,不作为项目范例。

#4楼  回复 引用 查看   

2009-06-07 14:44 by 紫色永恒      
在经过了漫长的preview和2个RC版本后...

嘿嘿 忘记说beta了

#5楼[楼主]  回复 引用 查看   

2009-06-07 14:59 by 李天平      
虽然作为正式版的MVC,但仍感觉还有很多不尽如人意的地方,期待未来的ASP.NET MVC能有强大的提升,让我们使的更舒服更方便。

#6楼  回复 引用 查看   

2009-06-07 15:16 by 杨鑫奇      
李老师也关注MVC的了,园子里面的各大告诉都在关注呵呵。
看来MVC用的人也是越来越多的了

#7楼  回复 引用 查看   

2009-06-07 16:06 by stg609      
留个足迹~~~

#8楼  回复 引用 查看   

2009-06-07 19:41 by oec2003      
能具体讲讲 asp.net mvc不尽如人意的地方 吗 谢谢

#9楼[楼主]  回复 引用 查看   

2009-06-07 21:52 by 李天平      
比如:模型和视图的严格分离可能使得调试困难一些,增加了代码的复杂性,Web Form编程模型和服务器控件所带给人们开发的便利和高效(举例如用GridView显示数据相对绑定模型还是繁琐一些)。
如同 MSDN 杂志中提到的,ASP.NET MVC不是用来取代传统 ASP.NET WebForm 的,两者有各自的优点和缺点,而将来的 ASP.NET MVC 还可能在UI 控制部分、控件拖曳、Routing 上持续改进。当然这些并不能遮盖MVC的设计思想所带来的价值。我们也期待微软未来的版本能提供更强大的Helper来帮我们解决这些。

MSDN 杂志:http://msdn.microsoft.com/zh-cn/magazine/cc337884.aspx
MSDN :http://msdn.microsoft.com/zh-cn/library/ms998540.aspx

#10楼  回复 引用 查看   

2009-06-08 08:52 by 代震军      
老李终于冒泡了,顶一下,呵呵:)

#11楼  回复 引用 查看   

2009-06-08 09:43 by 一线风      
关注一下!

#12楼[楼主]  回复 引用 查看   

2009-06-08 11:02 by 李天平      
@代震军 呵呵,今天有点时间,也学习一下MVC

#13楼  回复 引用 查看   

2009-06-08 11:26 by 老姜      
WEB的开发,就应该是MVC 这样的,为啥要弄出来 WebForm,搞的HTML代码经常不干净,虽然你也可以自己控制,但是总是不如 MVC 的干净,可控性更强。

#14楼  回复 引用 查看   

2009-06-08 15:18 by 一舟      
很久以前學習Jsp時,里面講到Model2,覺得MS的MVC的原理和那個Model2超級相似。

#15楼  回复 引用 查看   

2009-06-08 15:20 by 一舟      
webForm則和windowsForm一樣。編程比較直觀。

#16楼  回复 引用 查看   

2009-06-27 23:01 by wxbjs      
很好,学习了!不知道目前有多少公司使用MVC开发项目呢??

#17楼  回复 引用 查看   

2009-07-21 10:32 by 小李飛菜刀      
LZ那个数据库这么附加不了呢??

#18楼  回复 引用 查看   

2009-07-26 16:10 by scarroot      
生成的代码有点问题哟,不知道你是不是故意写成这样的.
生个标点符号这些就不说了,就说下面这个,
操作选项是.代码生成.c#代码,单类结构,基于sql方式.


/// <summary>
/// 类pubuser。
/// </summary>
public class pubuser
{
public pubuser()
{ }
#region Model
private string _userid;
private string _pwd;
/// <summary>
///
/// </summary>
public string userid
{
set { _userid = value; }
get { return _userid; }
}
/// <summary>
///
/// </summary>
public string pwd
{
set { _pwd = value; }
get { return _pwd; }
}
#endregion Model

/// <summary>
/// 得到一个对象实体
/// </summary>
public pubuser(string userid)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select ");
strSql.Append("userid,pwd ");
strSql.Append(" from pubuser ");
strSql.Append(" where userid='" + userid + "' ");
DataTable dt = _DB.DataTableGet(strSql.ToString());
if (dt.Rows.Count > 0)
{
userid = dt.Rows[0]["userid"].ToString();
/*注意这里,这里是对形参userid赋值了,而不是对成员userid赋值!,这里是错误的,*/
pwd = dt.Rows[0]["pwd"].ToString();
}
}

其它的方法 ,如getmodel等方法也是错误的.
为何不这样呢?
/// <summary>
/// 得到一个对象实体
/// </summary>
public pubuser(string puserid)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select ");
strSql.Append("userid,pwd ");
strSql.Append(" from pubuser ");
strSql.Append(" where userid='" + puserid + "' ");
DataTable dt = _DB.DataTableGet(strSql.ToString());
if (dt.Rows.Count > 0)
{
userid = dt.Rows[0]["userid"].ToString();
pwd = dt.Rows[0]["pwd"].ToString();
}
}

对方法的每个形参,前面都加上个字符,以示区别,如加个"p"字符.??


谢谢,愿你们做得更好.

#19楼[楼主]  回复 引用 查看   

2009-07-27 22:44 by 李天平      
@小李飛菜刀 数据库文件是基于SQL2005企业版的。
@scarroot 谢谢你的建议。本来这里不是指行参的,是指成员和形参重名,导致形参覆盖了成员。

#20楼  回复 引用 查看   

2009-08-03 17:22 by 攻秦      
Microsoft.Practices.EnterpriseLibrary.Data.dll  在哪里有下载

#21楼  回复 引用 查看   

2009-08-04 22:33 by Taven      
@攻秦
引用攻秦:Microsoft.Practices.EnterpriseLibrary.Data.dll  在哪里有下载


这个你安装微软的企业库 就有了

#22楼  回复 引用 查看   

2009-09-02 16:49 by 海洋之 心      
我也来了!!!

#23楼  回复 引用 查看   

2009-09-14 14:40 by seo中国      
应该是ASP.Net基于MVC模式!微软总是很慢!老了!
SEO中国

#24楼  回复 引用 查看   

2009-09-24 13:44 by coder狼      
ASP.Net的MVC是web层框架,如果实现这样的框架就非常完美了
ASP.Net MVC1.0 + Spring.Net + NHibernate
业务层用:Spring.Net
持久层用:NHibernate

大家觉得如何?

#25楼  回复 引用 查看   

2009-10-26 15:11 by 邀月      
现在大家学习感受mvc究竟是它的思想还是别的?如果说是前者,那么数十年前就已经存在了,为什么.net推出来MVC框架,很多人会觉得它是新东东呢?

#26楼  回复 引用 查看   

2010-03-24 14:37 by bdnet      
类似Java SSH框架型 MVC都一个概念 是吧