Linq to Sql与分层

it2022-05-05  134

如果想一个项目需要更换数据库时,业务层必须和数据层脱离依赖关系 

表的实体应该是贯穿整个项目的,可是以Linq to Sql作为DAL,实体就和数据层连一起了

今天看到园子里一位前辈的源代码,他自己写了一个实体,和 Linq to Sql做互换操作。

业务层只需要依赖自己写的实体,就实现了和  Linq to Sql 脱离依赖关系

 

具体实现多数据库的代码如下

  ///   <summary>      ///  数据访问组件的工厂类     ///  采用Abstract Factory模式 + 反射机制 + 缓存机制实现     ///   </summary>      public   class  DataComponentFactory    {         // 用哪个数据库从位置文件读          private   static   readonly   string  DATA_COMPONENT_LIB  =  ConfigurationManager.AppSettings[ " DataComponentLib " ];         private   static   object  CreateObject( string  className)        {             ///   <summary>              ///  取得数据访问组件对象,首先检查缓存,不存在则利用反射机制加载             ///  缓存依赖项为Web.Config文件             ///   </summary>              string  fullClassName  =  DATA_COMPONENT_LIB  +   " . "   +  className;             object  dataComponent  =  CacheAccessor < object > .GetFromCache(className);             if  (dataComponent  ==   null )            {                 // CacheDependency fileDependency = new CacheDependency(HttpContext.Current.Server.MapPath("Web.Config"));                 dataComponent  =  Assembly.Load(DATA_COMPONENT_LIB).CreateInstance(fullClassName);                 // CacheAccessor<object>.SaveToCache(className, dataComponent, fileDependency);                 CacheAccessor < object > .SaveToCache(className, dataComponent);            }             return  dataComponent;        }         ///   <summary>          ///  生产“留言”的数据访问组件         ///   </summary>          ///   <returns> “留言”的数据访问组件 </returns>          public   static  IMessageDataComponent CreateMessageDataComponent()        {             return  (IMessageDataComponent)CreateObject( " MessageDataComponent " );        }    }

 

  //业务层只需要调用某个数据层(可能是ACCESS,可能是Linq to sql)实现了数据操作接口的类

         private   static  IMessageDataComponent messageDataComponent  =  DataComponentFactory.CreateMessageDataComponent();

 

 

转载于:https://www.cnblogs.com/renjuwht/archive/2010/02/11/1667668.html


最新回复(0)