当你使用LINQ做底层时,最好设计一个工厂,不要把LINQ的动作暴露给业务层

简介:
1: using System;
  2: using System.Collections.Generic;
  3: using System.Linq;
  4: using System.Text;
  5: using System.Data.Linq;
  6: using System.Threading;
  7: 
  8: namespace Data
  9: {
 10:     /// <summary>
 11:     /// LINQ数据库连接对象制造工厂
 12:     /// </summary>
 13:     static internal class DataContextFactory
 14:     {
 15: 
 16:         static System.Timers.Timer sysTimer = new System.Timers.Timer(10000);
 17: 
 18:         volatile static Dictionary<Thread, DataContext[]> divDataContext = new Dictionary<Thread, DataContext[]>();
 19: 
 20:         static public int DataContextCount { get { return divDataContext.Count; } }
 21: 
 22:         static DataContextFactory()
 23:         {
 24:             sysTimer.AutoReset = true;
 25:             sysTimer.Enabled = true;
 26:             sysTimer.Elapsed += new System.Timers.ElapsedEventHandler(sysTimer_Elapsed);
 27:             sysTimer.Start();
 28:         }
 29: 
 30:         static void sysTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
 31:         {
 32:             List<Thread> list = new List<Thread>();
 33:             foreach (Thread item in divDataContext.Keys)
 34:             {
 35:                 if (item.ThreadState == ThreadState.Stopped)
 36:                 {
 37:                     list.Add(item);
 38:                 }
 39:             }
 40:             for (int index = 0; index < list.Count; index++)
 41:             {
 42:                 divDataContext.Remove(list[index]);
 43:                 list[index] = null;
 44:             }
 45:             list = null;
 46:         }
 47: 
 48:         /// <summary>
 49:         /// 通过工厂的制造模式获取相应的LINQ数据库连接对象
 50:         /// </summary>
 51:         /// <param name="dbName">数据库名称(需要与真实数据库名称保持一致)</param>
 52:         /// <returns>LINQ数据库连接对象</returns>
 53:         public static DataContext Intance(string dbName)
 54:         {
 55:             return Intance(dbName, Thread.CurrentThread);
 56:         }
 57:         /// <summary>
 58:         /// 通过工厂的制造模式获取相应的LINQ数据库连接对象
 59:         /// </summary>
 60:         /// <param name="dbName">数据库名称(需要与真实数据库名称保持一致)</param>
 61:         /// <param name="thread">当前线程引用的对象</param>
 62:         /// <returns>LINQ数据库连接对象</returns>
 63:         public static DataContext Intance(string dbName, Thread thread)
 64:         {
 65:             if (!divDataContext.Keys.Contains(thread))
 66:             {
 67:                 divDataContext.Add(thread, new DataContext[4]);
 68:             }
 69:             if (dbName.Equals("zzl"))
 70:             {
 71:                 if (divDataContext[thread][0] == null)
 72:                 {
 73:                     divDataContext[thread][0] = new Data.LinqzzlDataContext();
 74:                 }
 75:                 return divDataContext[thread][0];
 76:             }
 77:             else
 78:             {
 79:                 return null;
 80:             }
 81:         }
 82: 
 83:  
 84: 
 85:     }
 86: }

87:

本文转自博客园张占岭(仓储大叔)的博客,原文链接:当你使用LINQ做底层时,最好设计一个工厂,不要把LINQ的动作暴露给业务层,如需转载请自行联系原博主。

目录
相关文章
|
1天前
|
安全 前端开发 NoSQL
如果让你设计一个接口,你会考虑哪些问题?
接口设计需关注参数校验、扩展性、幂等性、日志、线程池隔离、异常重试、异步处理、查询优化、限流、安全性、锁粒度和避免长事务。入参与返回值校验确保数据正确性;考虑接口扩展性以适应不同业务需求;幂等设计防止重复操作;关键接口打印日志辅助问题排查;核心接口使用线程池隔离确保稳定性;异常处理中可采用重试机制,注意超时控制;适合异步的场景如用户注册后的通知;并行查询提升性能;限流保护接口,防止过载;配置黑白名单保障安全;适当控制锁粒度提高并发性能;避免长事务影响系统响应。
|
3天前
|
Java 数据库
java面向对象高级分层实例_数据库操作类
java面向对象高级分层实例_数据库操作类
12 1
|
开发者
业务层设计与开发(定义业务层标准) | 学习笔记
简介:快速学习业务层设计与开发(定义业务层标准)
110 0
业务层设计与开发(定义业务层标准) | 学习笔记
|
数据库 开发者
业务层设计与开发(业务层标准实现类) | 学习笔记
简介:快速学习业务层设计与开发(业务层标准实现类)
101 0
|
开发者
数据层设计与开发(数据层工厂类) | 学习笔记
简介:快速学习数据层设计与开发(数据层工厂类)
82 0
数据层设计与开发(数据层工厂类) | 学习笔记
|
开发者
待业务层设计与开发(业务层工厂类) | 学习笔记
简介:快速学习待业务层设计与开发(业务层工厂类)
52 0
|
SQL Java 数据库连接
数据层设计与开发(数据层标准实现类) | 学习笔记
简介:快速学习数据层设计与开发(数据层标准实现类)
126 0
数据层设计与开发(数据层标准实现类) | 学习笔记
Netweaver是如何判断哪些对象可以被增强的
Netweaver是如何判断哪些对象可以被增强的
65 0
Netweaver是如何判断哪些对象可以被增强的
一种在标准的SAP UI5方法里注入新逻辑的办法
一种在标准的SAP UI5方法里注入新逻辑的办法
一种在标准的SAP UI5方法里注入新逻辑的办法
|
存储 弹性计算 缓存
JavaWeb开发经验谈:业务行为相似DAO接口的统一封装与使用
以对mybatis-plus的封装使用为例,给出一个在适用业务场景下大幅降低代码信息熵的解决方案
JavaWeb开发经验谈:业务行为相似DAO接口的统一封装与使用