随笔-11  评论-54  文章-0  trackbacks-1

本文简单介绍以下内容:

1. Repository模式简介以及结合IQueryable改进的Repository模式;

2. 简单的TDD实践,使用ReSharper 4.0插件简化操作;

3. 结合使用依赖注入(Dependency Injection[中文翻译])工具StructureMap[文档下载],实现模块之间的松散耦合。

4. 提供一个很简单的论坛程序示例,Step by Step介绍以上内容。

差不多内容的blog示例在Codeplex上也早就有了,介绍MVC TDD和StructureMap的英文文章也挺多,本人才疏学浅,文采很烂,写本文是一是为了自己更深的掌握这些内容,二是为了让喜爱MVC的朋友也能获得一些帮助,也是第一次写东西放首页上,请各位前辈多提意见和建议。

Repository简介

介绍Repository的文章比较少,其实这个模式相当简单,首先对它做一个简单的介绍:

image

这就是一个比较简单的Repository模式,首先创建一个IRepository接口,这个接口定义一系列契约,然后创建一个实现这个接口的类,负责它的具体操作。然后在Context中对它进行实例化(在本示例中,实例由依赖注入框架完成)。

当然这个模式还可以结合简单工厂模式对它进行扩充,由工厂来完成它的实例创建工作。

 

应用程序整体结构

下面介绍一下本示例的结构,也是比较简单的:

首先,我们使用ASP.NET MVC Framwork Preview 5,所有的操作(发帖、回帖、删帖等)都是由在相应的Controller中的Action来完成的。关于MVC这里就不做详细介绍了。我这里创建了一个类库项目:TinyForum.Service,在这个项目中,创建一个IForumService定义一组契约,我们在Controller中需要一个它的实例字段(为了好看,图中为属性,字段在Class diagram中不显示关系)来完成操作(如图)。

image

上图中的ForumService类中,需要对数据操作进行封装。为了使用不同的数据库,还得建立一个项目:TinyForum.Data,在这个项目中,我们会定义一个IForumRepository接口,又由这个接口定义一组对数据库的操作,所有操作返回类型都为IQueryable类型,这样非常的方便,在ForumService中就可以对它进行任意的转换,也不会因为返回大量的IList还可能需要做进一步的筛选影响性能。

image

这是ForumService的实现:

image

这是IForumRepository的定义(随意定义了2个方法):

image

很显然,在ForumService中,需要一个对IForumRepository的依赖,在实现的代码中,我们创建了一个构造方法来获得这个对象,这时候出现一个麻烦问题,因为我们需要在上下文中去创建我们需要的IForumRepository的实例,这样做会造成可能需要修改ForumService的代码,这样是违反OCP原则的;

同时ForumController也需要一个对IForumService的依赖,并且要在构造方法中获得它的示例,而MVC默认的Controller构造方法是无参的,编译可以通过,不过运行的时候会得到一个黄色的异常页面,大概是这样:

image

看来需要使用一个依赖注入工具来解救我们。我这里使用的StructureMap。

在Web项目中,添加StructureMap引用,并在Controllers目录下添加一个StructureMapControllerFactory,如图:

image 

然后我们需要为StructureMap做一点配置,让它知道该做什么,首先创建一个StructureMap的注册表:ForumRegistry

image

另外还要添加一个注册表,用于让SqlRepository获得ForumDataContext(Linq):

image 

都不是很复杂,代码已经解释得很详细了,就不做累述了。

最后需要添加一个Bootstrapper,并添加到Global.asax.cs中去,启动的时候就执行。

image

image

基本结构就介绍到这里。

目前的解决方案截图:

image

怕文章又臭又长,所以干脆分开写(至少不长,呵呵),下一个部分将介绍使用Resharper插件、和TDD步骤,并象征性实现一些基本的功能。

posted on 2008-09-23 22:00 郁闷的翩翩 阅读(1741) 评论(26)  编辑 收藏 网摘 所属分类: ASP.NET MVC FrameworkStructureMap

评论:
#1楼  2008-09-23 22:04 | 紫色永恒      
先占个沙发
  回复  引用  查看    
#2楼  2008-09-23 22:06 | 李永京      
来头很大的说~~~
  回复  引用  查看    
#3楼  2008-09-23 22:11 | Q.Lee.lulu      
顶了再看...
@李永京
是啊是啊,来头确实大.一支军队
  回复  引用  查看    
#4楼  2008-09-23 22:13 | SZW      
慢慢看,下一篇早点出来啊:)
  回复  引用  查看    
#5楼  2008-09-23 22:15 | 紫色永恒      
突然想到前两天园子里争论胖瘦客DAL的问题 用IQueryable就解决了
  回复  引用  查看    
#6楼  2008-09-23 22:16 | 夜色圆舞曲 [未注册用户]
SBPP出品,必属精品~~收藏之
  回复  引用    
#7楼  2008-09-23 22:22 | 平静中的疯狂      
这个一定得慢慢看
  回复  引用  查看    
#8楼 [楼主] 2008-09-23 22:24 | 郁闷的翩翩      
@夜色圆舞曲,精品称不上,这个其实是我看了MVC storefront,和CODEPLEX上的一个blog示例,的一些收获,想尽量把它讲明白,代码和他们的都差不多的,不复杂。
  回复  引用  查看    
#9楼  2008-09-23 22:30 | Leven      
来晚了,sbpp的东西一定要支持下.
ps:有时间多修正下模板bug...
  回复  引用  查看    
#10楼  2008-09-23 22:40 | abcs [未注册用户]
好文章,顶一下。
  回复  引用    
#11楼  2008-09-23 22:51 | Gray Zhang      
@紫色永恒
你试着把IQueryable扔到需要序列化的环境下就知道了……为了和WCF等配合,返回依旧只能是最纯的List<T>……
  回复  引用  查看    
#12楼  2008-09-23 23:04 | jun1st [未注册用户]
MVC StoreFront?
  回复  引用    
#13楼 [楼主] 2008-09-23 23:05 | 郁闷的翩翩      
@jun1st
大概,是吧......
  回复  引用  查看    
#14楼  2008-09-23 23:13 | 重典      
顶PP
  回复  引用  查看    
#15楼  2008-09-23 23:15 | Q.Lee.lulu      
我就说了有一军队,哈哈
  回复  引用  查看    
#16楼 [楼主] 2008-09-23 23:23 | 郁闷的翩翩      
还得向楼上两位学习啊。我脸皮一厚,就把这种没多少技术含量的发首页了。
  回复  引用  查看    
#17楼  2008-09-24 08:10 | <∩扫地僧∩>      
报告!我来晚了!
  回复  引用  查看    
#18楼  2008-09-24 10:22 | fat300 [未注册用户]
很好奇,谁能解释一下,“SBPP”是啥?为什么说“来头确实大.一支军队”?
  回复  引用    
#19楼 [楼主] 2008-09-24 12:20 | 郁闷的翩翩      
@fat300:
就是在一个群里经常一起聊MVC的朋友,帮忙顶顶帖子而已,没什么来头的,第一次斗胆往首页放文章。
  回复  引用  查看    
#20楼  2008-09-24 16:46 | pk的眼泪      
哈哈,原来是你.我也来顶一下.
  回复  引用  查看    
#21楼  2008-09-25 22:27 | yzlhccdec      
用IQueryable之后,对数据库的访问会完全脱离掌控,稍微没用好就会有性能问题。。
  回复  引用  查看    
#22楼  2008-09-28 17:34 | A1 [未注册用户]
不错,老刘写的都没几个人能看懂,补充一下:是因为太专业了
  回复  引用    
#23楼 [楼主] 2008-09-28 17:38 | 郁闷的翩翩      
@A1
你太抬举我了,我写的都是很基础的
  回复  引用  查看    
#24楼  2008-10-04 02:41 | 勇敢的兽      
这两天也正好在看Commerce的代码,握手
  回复  引用  查看    
#25楼 [楼主] 2008-10-04 03:18 | 郁闷的翩翩      
@勇敢的兽
握手握手。
StoreFront有点大,我就是想拆开来,一个一个分析,结合一下经验和浅见,自己边摸索边写,好久没更新了,我想应该不会太监掉吧。
  回复  引用  查看    
#26楼  2008-10-04 10:35 | 勇敢的兽      
会一直支持你滴,放心大胆的干吧,要是太监......小心.......

恰好周末,来个(3)
  回复  引用  查看    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-10-02 22:20 编辑过
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!


相关链接: