工厂模式三层

原创 2012年12月29日 08:33:24
      第一次接触工厂模式是在我最近开发的一个项目中,由于项目需求远超出预想,再加上去研究新技术,所以根本没有时间去琢磨项目开发中所用的框架。项目刚告一段落,花了点时间将项目的框架研究了下,以下我就说说自己的理解。
       这次项目中用到的框架,就是已经被用烂了的三层,三层架构(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);这段代码即创建出了该类的实例。
     以上是我对项目中工厂模式的理解,本人水平有限,而且是刚开始写文章,所以说的不到位的请大家见谅!!!

相关文章推荐

工厂模式的三层结构演示

  • 2008年12月03日 20:46
  • 65KB
  • 下载

基于工厂模式的三层架构

在项目开发时,有时候可能会增加或修改新的数据库,比如,刚开始我们项目用SQL Server 数据库,但后来需要用Oracle 数据库,或者说在某些情况下需要用Oracle 来代替SQL Server ...

由简单三层到工厂模式

以ASP.NET为例,简单三层就是 DAL, BLL,Model 三层构成, DAL层处理数据,负责与数据打交道,比如SQL语句的书写等,DAL层处理完数据后的结果,交由BLL层,BLL层这时对数据进...

基于接口的工厂模式的三层架构

  • 2009年02月05日 20:52
  • 1.82MB
  • 下载

asp.net mvc中自行搭建实现工厂模式的spring.net+三层架构 (15-4-20)

在之前的文章中,我们已经搭好了三层框架,通过调用业务层的子接口得到实例化的业务子类,通过业务子类来调用数据访问层子接口,由子接口来实例化数据访问层子类。这里我们需要明确把框架搭这么复杂的原因是遵循了设...

C#基于工厂模式的三层架构示例

  • 2008年10月21日 10:18
  • 1.83MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:工厂模式三层
举报原因:
原因补充:

(最多只允许输入30个字)