- 热门文章:
- · 在ASP.NET中实现MVC模式(四)
- · 在ASP.NET中实现MVC模式(二)
- · 在ASP.NET中实现MVC模式(一)
- · ASP.NET中根据XML动态创建并使用WEB组件(三)
- · ASP.NET中根据XML动态创建并使用WEB组件(二)
- · ASP.NET中根据XML动态创建并使用WEB组件(一)
- · 开发基于Web的CSS设计器
- · 用ImessageFilter接口实现截获键盘消息
- · 窗体启动特效
- · Microsoft Visual Studio .NET 2003制作安装程序
- · 实现基于事件通知的.Net套接字
- · Programming MS Office 2000 Web Components第一章第三节
上一篇:越过调试这道槛——ASP.NET无法调试问题剖析 >>
在ASP.NET中实现MVC模式(五)
测试
将模型部分从ASP.NET环境中分离出来能够使模型部分更容易的被测试。在ASP.NET环境中进行测试的话,你必须同时测试很多方面,如HTML代码是否正确,而读取HTML代码的工作是非常烦闷的。将模型部分分离出来,使你能够对模型部分做单独的单元测试。下面是NUnit (http://nunit.org)对模型部分进行单元测试的例子。
using System;
using NUnit.Framework;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
[TestFixture]
public class GatewayFixture
{
[Test]
public void Tracks1234Query()
{
DataSet ds = DatabaseGateway.GetTracks("1234");
Assertion.AssertEquals(10, ds.Tables["Track"].Rows.Count);
}
[Test]
public void Tracks2345Query()
{
DataSet ds = DatabaseGateway.GetTracks("2345");
Assertion.AssertEquals(3, ds.Tables["Track"].Rows.Count);
}
[Test]
public void Recordings()
{
DataSet ds = DatabaseGateway.GetRecordings();
Assertion.AssertEquals(4, ds.Tables["Recording"].Rows.Count);
DataTable recording = ds.Tables["Recording"];
Assertion.AssertEquals(4, recording.Rows.Count);
DataRow firstRow = recording.Rows[0];
string title = (string)firstRow["title"];
Assertion.AssertEquals("Up", title.Trim());
}
}
结论:
在ASP.NET中实现MVC模式有如下优缺点:
优势:
能够减少依赖。 程序员可以在一个ASP.NET页面中实现所有的代码。单页的实现方式,对于一些小型的且生存周期不长的程序是适用的。但如果想在不断增加的页面间共享代码的话,将代码的不同部分进行分离是非常有效果的。
能够减少代码的复制。 DatabaseGateway 类中的GetRecordings 和 GetTracks方法能够直接被其它的页面使用,减少了必须将方法的代码拷贝到不同页面的情况。
能够把不同人员的责任分开。修改页面的外观与修改数据访问的代码所用的技术是不同的,将模型与视图分开能够使负责不同工作的专家协同的工作。
使性能优化的成为可能 按将系统不同的职责分成不同的类,使性能的优化成为可能。前面的例子中,由于每次请求页面的时都要从数据库中读取数据。因此可在某种情况下将数据缓存,从而提高整个程序的性能。如果不将代码进行分离的话是无法做到的这点的。
易测试性 将模型与视图相分离使在ASP.NET环境外进行单元测试成为可能。
缺点:
增加了代码的数量及复杂度。这个例子在早期单页的实现方式的基础上增加了新的文件和代码,在无形中增加了维护的开销。一旦修改系统的话,会修改所有三种角色的代码。在一些情况下,一个文件中的修改比一些文件中修改要方便。所以在考虑是否使用MVC模式时。这种额外的开销一定要被计算在内,对一些小的程序来说,这种开销是不值得的。
下一篇:在ASP.NET中实现MVC模式(四) >>
相关文章:
- · WalkThrough : SharePoint WebPart入门指南全5辑
- · .Net WinForm学习笔记
- · 在IE浏览器中使用Windows窗体控件(三)
- · 在IE浏览器中使用Windows窗体控件(二)
- · 在IE浏览器中使用Windows窗体控件(一)
- · 基于ASP.NET实现全球化
- · Asp.net动态生成html页面
- · 可以搜索的ComboBox----
- · 实战 .Net 数据访问层 - 5
- · 实战 .Net 数据访问层 - 4
- · 实战 .Net 数据访问层 - 3
- · 实战 .Net 数据访问层 - 2
- · .Net里的序列化
- · 从在 Internet Explorer 中使用 Windows 窗体控件开始谈Smart Client
- · 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(4)
- · 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(3)
- · 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(2)
- · 关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(1)
- · Csharp+Asp.net系列教程(三)
- · Csharp+Asp.net系列教程(二)
- · 设计模式之代理模式(Proxy)
- · 弹出对话框的同时保持页面的显示
- · ASP.Net中使用VB.Net调用存储过程并得到返回值
- · 改变文本框、按钮样式函数
- · 使用Asp.Net中的XmlValidatingReader来验证XML Schema.
- · 用asp.net 实现“九连环” 小游戏
- · ASP.Net中使用VB.Net调用存储过程并得到返回值
- · ASP.NET 的亲密朋友之--javascript
- · 如何开发一个可复用的软件系统
- · 在ASP.NET中显示进度条
- · 路由模拟——类设计的声明部分
- · 如何重新设置DataSet中的DataTable对象
- · 用NUnit2.1简单实现.net的测试驱动开发(TDD)
- · ASP.NET中的STREAMREADER对象总结
- · ASP.NET中的STREAMREADER对象总结
- · ASP.NET中的FILESTREAM对象总结
- · ASP.NET中的FILE对象总结
- · asp.net中常用的一些小技巧
