工厂模式三层

来源:互联网 发布: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);这段代码即创建出了该类的实例。
     以上是我对项目中工厂模式的理解,本人水平有限,而且是刚开始写文章,所以说的不到位的请大家见谅!!!
原创粉丝点击