MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构
在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构。于是就有了本篇:
IDAL层

→IBaseRepository接口,基接口,提供泛型实现
所有的数据接口层的方法基本上是一样的,包括查询、分页查询、添加、批量添加、更新、批量更新、删除、批量删除等。所以,有必要针对所有的数据接口提炼出基接口,提供泛型实现。
→IProductRepository接口
实现IBaseRepository接口。
→IDbContextFactory接口,当前EF上下文的抽象工厂
在DAL的BaeRepository中一定会用到EF上下文,我们借助IDbContextFactory这个"抽象工厂"生产DbContext的实例。
→IDbSession接口,数据库访问层的统一入口接口
主要做了3件事:
1、提交所有变化
2、拿到各个IXXXRepository类型
3、执行SQL语句
→IDbSessionFactory接口,IDbSession接口的抽象工厂
在BLL的BaseService中一定会用到IDbSession这个数据层的统一入口,我们借助IDbSessionFactory这个"抽象工厂"生产IDbSession的实例。
DAL层

→BaseRepository,所有XXXRepository的基类,提供泛型实现
BaseRepository没必要实现IBaseRepository,因为它的存在是为了避免各个XXXRepository代码重复,它提供了各个XXXRepository的泛型实现。
BaseRepository实现IDisposable接口后,以便实施手动回收。
→ProductRepository
派生于BaseRepository<Product>基类。
实现IProductRepository接口,它的行为受IProductRepository约束。
→DbContextFactory,实现抽象工厂IDbContextFactory接口,用来生产EF上下文实例
它的实现过程保证了在当前线程内获取唯一EF上下文实例。
→DbSession,对IDbSession接口的实现
主要做了3件事:
1、提交所有变化
2、拿到各个IXXXRepository类型
3、执行SQL语句
→DbSessionFactory,实现IDbSessionFactory接口
它的实现过程保证了在当前线程内获取唯一数据层访问入口IDbSession实例。
IBLL层

→IBaseService,是所有IXXXService接口的基接口,提供了泛型实现
它的实现避免了各个IXXXService接口的重复部分。
→IProductService,对基接口IBaseService<Product>的实现
BLL层

→BaseService,是所有XXXService的基类,提供了泛型实现
他的实现避免了各个XXXService的重复部分。
实现IDisposable接口后,以便实施手动回收。
→ProductService,派生于BaseService<Product>基类。
它的行为受实现IProductService接口约束。
源码在这里。
“MVC项目实践,在三层架构下实现SportsStore”系列包括:
MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构
MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层
MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等
MVC项目实践,在三层架构下实现SportsStore-04,实现分页
MVC项目实践,在三层架构下实现SportsStore-05,实现导航
MVC项目实践,在三层架构下实现SportsStore-06,实现购物车
MVC项目实践,在三层架构下实现SportsStore-07,实现订单提交
MVC项目实践,在三层架构下实现SportsStore-08,部署到IIS服务器
MVC项目实践,在三层架构下实现SportsStore-09,ASP.NET MVC调用ASP.NET Web API的查询服务
MVC项目实践,在三层架构下实现SportsStore-10,连接字符串的加密和解密
MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构的更多相关文章
- MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-04,实现分页
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-05,实现导航
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-06,实现购物车
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-07,实现订单提交
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-08,部署到IIS服务器
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-09,ASP.NET MVC调用ASP.NET Web API的查询服务
ASP.NET Web API和WCF都体现了REST软件架构风格.在REST中,把一切数据视为资源,所以也是一种面向资源的架构风格.所有的资源都可以通过URI来唯一标识,通过对资源的HTTP操作(G ...
随机推荐
- 关于Div的宽度与高度的100%设定
http://www.cnblogs.com/clare-zhang/archive/2011/08/26/2154220.html 正像你所知道的那样,设置DIV大小的有两个属性width和heig ...
- 使用 Sublime Text 做 Javascript 编辑器 - 集成 SublimeCodeIntel 实现代码智能提示及自动完成
Sublime Text 是一个强大并具有很强扩展性的 IDE,可通过为其安装 SublimeCodeIntel 插件实现代码智能提示和自动完成功能. 目前该插件支持以下语言: JavaScript, ...
- Android 蓝牙4.0 BLE
Android ble (Bluetooth Low Energy) 蓝牙4.0,也就是说API level >= 18,且支持蓝牙4.0的手机才可以使用. BLE是蓝牙4.0的核心Profil ...
- Android -- shape 定义控件的属性
<shape> <!-- 实心 --> <solid android:color="#ff9d77"/> <!-- 渐变 --> & ...
- [IBM DB2] db2 terminate 和 db2 connect reset 有什么区别?
[IBM DB2] db2 terminate 和 db2 connect reset 有什么区别? 总结:如果是退出编辑器 quit :如果是断开数据库连接释放资源 connect reset : ...
- SQL Server2008清空日志文件
USE[master] GO ALTER DATABASE mydbname SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE mydbname S ...
- 几种常用的JS类定义方法
几种常用的JS类定义方法 // 方法1 对象直接量var obj1 = { v1 : "", get_v1 : function() { return ...
- Node.js前端自动化工具:gulp
前端自动化工具 -- gulp 使用简介 gulp是基于流的前端自动化构建工具. 之前也谈到了 grunt的用法,grunt其实就是配置+配置的形式. 而gulp呢,是基于stream流的形式,也就是 ...
- 字典的快速赋值 setValuesForKeysWithDictionary
字典的快速赋值 setValuesForKeysWithDictionary 前言 在学习解析数据的时候,我们经常是这么写的:PersonModel.h文件中 @property (nona ...
- java实现MD5加密
mport java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Creat ...