工厂模式三层

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

由简单三层到工厂模式

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

基于工厂模式的三层架构

需求:在程序代码不做任何改动的情况,只要配置不同的数据库如:ACCESS,MS SQL,ORACLE等,则程序一样能执行。1、建立IDAL类库项目,抽象数据访问接口。为每个表建立接口,规定各种操作(如...
  • aspnet2002web
  • aspnet2002web
  • 2010-11-10 23:47:00
  • 3944

工厂模式的三层登陆 c#模式设计

  • 2010年04月06日 13:12
  • 1MB
  • 下载

三层架构+工厂模式(经典案例)带图,带说明

  • 2012年11月08日 13:31
  • 185KB
  • 下载

动软使用工厂模式生成简单三层架构的些许介绍

首先建立自己的数据库,用动软连接连接数据库.根据需要选择数据库并自动生成代码. 动软自动生成的代码还不能立刻使用需要修改一些地方: 1、修改webconfig中的节为自己的命名空间。 2、修改w...
  • u010677775
  • u010677775
  • 2014-01-16 16:36:33
  • 1657

工厂模式+三层小范例

  • 2009年03月01日 01:18
  • 136KB
  • 下载

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

首先附上本人托管在Github上的项目https://github.com/lichaojacobs/Tomato 线上地址:www.wanhb.cn 接下来的三层结构都包含了父接...
  • github_34560747
  • github_34560747
  • 2016-04-10 23:46:16
  • 1260

c#三层工厂模式(带数据库)

  • 2009年02月12日 12:34
  • 253KB
  • 下载

三层架构中 工厂模式和单例模式的使用

工厂模式和单例模式的使用     在上一篇中简单的说明一下三层架构,为了对数据访问层进一步封装,可以采用工厂模式和单例模式,其中工厂负责生产UserDao的具体实现类,而在一个应用中实现类有...
  • fanwenjieok
  • fanwenjieok
  • 2015-07-18 12:48:05
  • 520

关于三层架构,MVC模型,工厂设计模式三者 .

刚学这些知识的时候,也了解三层架构和MVC是不一样的东西,但是具体不一样在哪,却不懂得. 以为M,V,C也是分成3层嘛,那和三层架构到底有什么区别呢?还有工厂模式,和MVC,和三层架构,又有什么关系...
  • wolf_121
  • wolf_121
  • 2012-11-10 09:28:45
  • 1947
收藏助手
不良信息举报
您举报文章:工厂模式三层
举报原因:
原因补充:

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