工厂模式三层
来源:互联网 发布:mac终端password 编辑:程序博客网 时间:2024/04/27 19:28
第一次接触工厂模式是在我最近开发的一个项目中,由于项目需求远超出预想,再加上去研究新技术,所以根本没有时间去琢磨项目开发中所用的框架。项目刚告一段落,花了点时间将项目的框架研究了下,以下我就说说自己的理解。
这次项目中用到的框架,就是已经被用烂了的三层,三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(Item)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想,下图为我开发中的解决方案
三层架构我就不再详细说了,网上一大堆,我说下在该项目中所用到的工厂模式,工厂模式定义:提供创建对象的接口.本项目中访问数据库时,都是先通过Factory创建出一个对象,然后我们通过该对象实现对数据库的访问。针对不同的数据库表,我们会在IDAL层中生成对该表访问的接口,并在SQLServerDAL中实现了所有接口。而Factory就是将此两次结合起来实现动态创建对象。以下是项目中Factory源码。
namespace Factory
{
/// <summary>
/// 缓o存??操??作???类???
/// </summary>
public class DataCache
{
/// <summary>
/// 获?取??当???前??应?|用??程??序??指?定??CacheKey的??Cache值??
/// </summary>
/// <param name="CacheKey"></param>
/// <returns></returns>
public static object GetCache( string CacheKey)
{
System.Web.Caching. Cache objCache = HttpRuntime .Cache;
return objCache[CacheKey];
}
/// <summary>
/// 设???置?当???前??应?|用??程??序??指?定??CacheKey的??Cache值??
/// </summary>
/// <param name="CacheKey"></param>
/// <param name="objObject"></param>
public static void SetCache( string CacheKey, object objObject,CacheDependency cachedep)
{
System.Web.Caching. Cache objCache = HttpRuntime .Cache;
objCache.Insert(CacheKey, objObject,cachedep);
}
}
}
缓存操作类实现对缓存的操作,这里的主要作用是,将新建出来的对象存起来,等到下次在创建对象是如果缓存中有该对象的实例就将次对象直接返回,如果不存在再创建对象。这样做的好处是节省内存,不用每次都在堆中创建一个对象。关于缓存的详细介绍可以参考这篇文章http://www.cnblogs.com/caoxch/archive/2006/11/20/566236.html
public sealed class DependencyProvide
{
public static object GetDALObject( string className)
{
object dal = DataCache .GetCache("DAL");
if (dal == null )
{
CacheDependency fileDependency = new CacheDependency(HttpContext .Current.Server.MapPath("Web.Config"));
dal = ConfigurationManager.AppSettings["DAL" ];
DataCache.SetCache("DAL" , dal, fileDependency);
}
string dalName = (string )dal;
/// </summary>
string fullClassName = dalName + "." + className;
object dalObject = DataCache .GetCache(className);
if (dalObject == null )
{
CacheDependency fileDependency = new CacheDependency(HttpContext .Current.Server.MapPath("Web.Config"));
dalObject = Assembly.Load(dalName).CreateInstance(fullClassName);
DataCache.SetCache(className, dalObject, fileDependency);
}
return dalObject;
}
}
该函数实现了动态创建对象的功能,该函数首先判断在缓存中是否存在要创建对象的实例,如果存在则直接返回该对象,如果不存在则创建之,并将其存入缓存。在次主要解释下在该函数中如何创建不同的对象,在创建对象时首先获取web.config中的配置信息,该信息记录IDAL层中接口的实现在那一个子项目中,本项目中ConfigurationManager .AppSettings["DAL" ];的值为SQLserverDAL,即接口的实现代码在SQLserverDAL中。string fullClassName = dalName + "." + className;这段代码拼接出要创建的对象的完整类名, dalObject = Assembly .Load(dalName).CreateInstance(fullClassName);这段代码即创建出了该类的实例。
以上是我对项目中工厂模式的理解,本人水平有限,而且是刚开始写文章,所以说的不到位的请大家见谅!!!
- 工厂模式三层
- 三层架构与简单工厂模式
- VS2008三层架构工厂模式开发
- 基于工厂模式的三层架构
- 基于工厂模式的三层架构
- 基于工厂模式的三层架构
- 由简单三层到工厂模式
- C#--抽象工厂设计模式--三层框架
- .Net普通三层->工厂模式->线程内唯一+单元工作模式->WebService分布式三层
- 基于接口的工厂模式的三层架构
- 三层结构引入工厂模式后的模型
- 关于三层架构,MVC模型,工厂设计模式三者
- 二期-三层架构-上机五-抽象工厂模式
- 二期-三层架构-上机五-抽象工厂模式
- 从三层结构到抽象工厂模式的软件设计
- 关于三层架构,MVC模型,工厂设计模式三者 .
- 关于三层架构,MVC模型,工厂设计模式三者 .
- 讲解三层结构和抽象工厂模式的技巧
- 面试笔记 2
- Windows Phone学习笔记:使用 Fiddler 收录WP7上的 HTTP 封包
- 面试笔记 1
- difference between Abstract class and interface in java
- Yii Framework 开发教程(28) Data Provider 简介
- 工厂模式三层
- 《菜根谭》全文及译文
- 5 frontpage+Access数据库的修改
- ireport 3.7.0 浏览中文没问题,生成pdf文档文字是竖着的解决办法
- 无光驱U盘启动安装CentOS 6.3
- 程序算法与人生选择
- DreamwearCS4 防止背景图片平铺
- 汽车发动机异响和后桥异响的分辨
- 生成Myeclipse 注册码