工厂模式三层

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

MVC和三层架构

一、MVC M:(Model)  模型  :  应用程序的核心功能,管理这个模块中用的数据和值; V(View )视图:   视图提供模型的展示,管理模型如何显示给用户,它是应用程序的外观; C...
  • lyx1980916167
  • lyx1980916167
  • 2017年04月01日 16:04
  • 1941

三层架构(二)——为什么要用三层架构?

二、为什么要用三层架构?      1、分析       层次结构在现实社会中随处可见。记得有个笑话讲有个村长得意的向他的老婆吹牛:“全中国比我官大的只有四个人,乡长、县长、省长和国务院总理”,这个笑...
  • u010853701
  • u010853701
  • 2014年06月28日 17:18
  • 2082

C#三层架构总结

1. 三层项目  复杂项目不能把SQL语句直接写到界面里,不模块化,难以维护,应该采用三层架构  三层只是一个比较好的软件架构,不是非用三层不可,复杂项目才用三层  界面层UI  业务逻辑层BLL(B...
  • u013905744
  • u013905744
  • 2015年09月25日 18:42
  • 799

关于J2EE开发三层架构

现在开发web大多都是基于MVC的三层架构,三层架构优势什么呢?        三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业...
  • u011569303
  • u011569303
  • 2014年03月28日 16:12
  • 2995

MVC和三层架构的比较

以前涉及到.NET做项目,脑袋里面只有一个概念,那就是三层,最近学习了一种新的架构思想,那就是ASP.NET MVC+EF+EasyUI,我们的项目已经进行了一半了,对这个架构算是有了初步的认识。  ...
  • zjx86320
  • zjx86320
  • 2014年12月07日 21:09
  • 2022

三层架构及生活实例

概述 三层架构(3-tierarchitecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低...
  • bigpudding24
  • bigpudding24
  • 2015年12月22日 14:11
  • 2024

简单三层登录

简单的聊一下写这篇博客的背景,在跟着三层视频敲三层的时候,用的是自己的数据库,所以导致在敲完后出现不少问题。敲三层的视频还是有漏洞的,他只能在显示登录成功,却不能显示登录失败,只要你输入的用户名和密码...
  • dsj15831653282
  • dsj15831653282
  • 2015年12月29日 19:16
  • 794

SSH学习之MVC和三层架构的区别

在学习SSH过程中总是会遇到这样的问题:MVC和三层架构是不是一个概念?肯定的说,他两就不是一个概念。所以就总结了一下自己的看法。可能会有理解错误的地方,希望可以交流交流。 二者混淆的原因 二...
  • qq_31796663
  • qq_31796663
  • 2017年02月23日 12:47
  • 836

delphi三层架构

我们的delphi程序很多是以前开发的,采用典型的CS架构,由程序直接连接数据库。现在需要改成在外网可以直接操作软件。 先把数据库搬到了阿里云上,测试发现直接连数据库和VPN连接测试速度很慢,直连还容...
  • pcwe2002
  • pcwe2002
  • 2016年09月13日 17:21
  • 3212

.net中的三层架构简介

三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想...
  • Vikerfeng
  • Vikerfeng
  • 2014年03月16日 13:25
  • 3059
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:工厂模式三层
举报原因:
原因补充:

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